Δημοσιεύτηκε: 13 Ιαν 2013, 02:14
από simosx
clepto έγραψε:έχω καιρό να ασχοληθώ με C και μπορεί να έχω κανένα λαθάκι...νομίζω ότι δεν συνιστάτε η χρήση της gets


Δεν συνίσταται η gets() διότι μπορεί να γίνει

Κώδικας: Επιλογή όλων
char buf[80];

gets(buf);

και αν γράψεις ένα αλφαριθμητικό που είναι πάνω από 80 χαρακτήρες (αν είναι με ελληνικά, γύρω στους 45 χαρακτήρες), τότε θα επικαλυφθούν περιοχές της μνήμης του προγράμματος σε εκτέλεση. Και μάλλον θα καταρρεύσει.

Αντί για gets(), το σωστό είναι η χρήση της fgets(), διότι έχει όρισμα για το μέγεθος του πίνακα. Έτσι,

Κώδικας: Επιλογή όλων
fgets(buf, 80, stdin);
i = atoi(buf);


Οπότε, και η scanf() και η gets(), έχουν πρόβλημα ασφάλειας, διότι δεν έχουν παράμετρο για το μέγιστο μέγεθος του πίνακα.
Όταν λαμβάνουμε είσοδο από το χρήστη, πρέπει να μετράμε πάντα να μη ξεπερνούν τα όρια στους πίνακες, κτλ.