Δημοσιεύτηκε: 16 Αύγ 2011, 15:34
migf1 έγραψε:Μα σου εξήγησα γιατί θα τρέχει αιώνια σε περίπτωση που ο χρήστης σου πληκτρολογήσει περισσότερους από MAX_SLEN χαρακτήρες στην κύρια είσοδο. Δεν θα υπάρχει '\n' μέσα στο string σε αυτή την περίπτωση (μονάχα '\0' θα υπάρχει).
Δοκίμασέ το και μόνος σου, βάλε το MAX_SLEN ίσο ξέρω γω με 5 και στην κύρια είσοδο πληκτρολόγησέ του 7 χαρακτήρες... θα μπει σε infinite loop αν δεν κάνεις έλεγχο και για '\0'.
EDIT:
Αν θέλεις να μην υπάρχει σίγουρα '\n' έτσι κι αλλιώς, αντί για fgets() διάβαζε το string με την s_get() ή ακόμα καλύτερα με την s_getflushed()... αυτές τις έχω φτιάξει έτσι ώστε εγγυημένα να μην υπάρχει '\n' στο διαβασμένο string!
βασικα βαζω #define N 5
και δινω μια συμβολοσειρα πχ 7 χαρακτηρων μου βγαζει το hello MEXΡΙ ΤΟ hell και μετα κατι ασυναρτησιες κατι paths απο το λειτουργικο αν καταλαβαινω καλα οποτε αυτο εννοεις οτι ξαναμπαινει σε loop????... κοιτα μπορω να παρω μια δικια σου ετοιμη συναρτηση απλα θελω να παιδευτω λιγο παραπανω για να μην σας ζαλιζω συνεχεια να τα καταλαβω τελειως να ξεμπερδευω!!!!!!
p.s Μεσα στην for δεν κανω ελεγχο για '\0' αλλα για '\n' .