Η συνάρτηση scanf και η gets δεν ελέγχουν αν το κείμενο που δίνει ο χρήστης ξεπερνάει την δεσμευμένη μνήμη .
Για αυτό το λόγο θα πρέπει να χρησιμοποιήσουμε μια συνάρτηση όπου θα μας παρέχει περισσότερη ασφάλεια .
Εμφάνιση :
Για αυτό το λόγο θα πρέπει να χρησιμοποιήσουμε μια συνάρτηση όπου θα μας παρέχει περισσότερη ασφάλεια .
Αντί για την συνάρτηση gets θα χρησιμοποιήσουμε την συνάρτηση fgets .
Συντάσσεται ως εξής :
fgets (onoma_alphar, sizeof(onoma_alphar), biblio8iki)
Η βιβλιοθήκη στην οποία ανήκει η συνάρτηση είναι :
#include<stdio.h>
Άρα εμείς όταν θα θέλουμε να την χρησιμοποιήσουμε θα γράφουμε :
fgets (pinakas_alf, sizeof(pinakas_alf), stdin);
Αλλιώς θα πρέπει να χρησιμοποιήσουμε στην συνάρτηση scanf θα πρέπει να χρησιμοποιήσουμε το προσδιοριστικό %ns όπου n είναι το μέγιστο πλήθος του αλφαριθμητικού.
Παράδειγμα :
1 2 3 4 5 6 7 8 9 10 | #include<stdio.h> #include<string.h> int main(void) { char pinakas_alf[100]; printf("Dose keimeno : \n"); fgets(pinakas_alf,sizeof(pinakas_alf),stdin); printf("Pliktrologisate : %s \n",pinakas_alf); return 0; } |
Εμφάνιση :
Αν δώσουμε λιγότερο μέγεθος και πληκτρολογήσουμε παραπάνω χαρακτήρες τότε θα τυπωθεί μόνο το κείμενο που ισούται με το μέγεθος που έχει ορισθεί.
Παράδειγμα :
1 2 3 4 5 6 7 8 9 10 | #include<stdio.h> #include<string.h> int main(void) { char pinakas_alf[10]; printf("Dose keimeno : \n"); fgets(pinakas_alf,sizeof(pinakas_alf),stdin); printf("Pliktrologisate : %s \n",pinakas_alf); return 0; } |
Ακόμα μπορούμε να χρησιμοποιήσουμε κατά τη δήλωση του αλφαριθμητικού ένα μέγιστο αριθμό πχ 5000 θέσεων.
char pinakas_alf [ 5000 ] ;
Παρόλο που κάνουμε παρακράτηση μνήμης.
Είναι η τελευταία λύση που μπορούμε να σκεφτούμε καθώς η μνήμη είναι πολύτιμη και δεν θέλουμε να κάνουμε παρακράτηση μνήμης.
Είναι η τελευταία λύση που μπορούμε να σκεφτούμε καθώς η μνήμη είναι πολύτιμη και δεν θέλουμε να κάνουμε παρακράτηση μνήμης.