Συντονιστής: konnn

Star_Light έγραψε:
...
αλλα δημιουργωντας και μια δευτερη συναρτηση στην οποια θα βαζω εκει να υπολογιζει το αντιστροφο της φρασης μας και θα την καλω με αναφορα.

Star_Light έγραψε:η fgets δηλαδη αν ξεπερασεις τα ορια του buff πχ 255+1 που το οριζεις αρχικα... δεν θα βρίσκει τον '\0' απο μονη της... οποτε θα τρεχει συνεχως μεχρι να τον βρει οποτε θα τρεχει αιωνια?! Δεν βάζει δηλαδη στο τελος ενα '\0' απο μονη της στο δοθέν string?
έγραψε:
http://pubs.opengroup.org/onlinepubs/00 ... fgets.html
NAME
fgets - get a string from a stream
SYNOPSIS
#include <stdio.h>
char *fgets(char *restrict s, int n, FILE *restrict stream);
DESCRIPTION
The fgets() function shall read bytes from stream into the array pointed to by s, until n-1 bytes are read, or a <newline> is read and transferred to s, or an end-of-file condition is encountered. The string is then terminated with a null byte.
...

migf1 έγραψε:Μα σου εξήγησα γιατί θα τρέχει αιώνια σε περίπτωση που ο χρήστης σου πληκτρολογήσει περισσότερους από MAX_SLEN χαρακτήρες στην κύρια είσοδο. Δεν θα υπάρχει '\n' μέσα στο string σε αυτή την περίπτωση (μονάχα '\0' θα υπάρχει).
Δοκίμασέ το και μόνος σου, βάλε το MAX_SLEN ίσο ξέρω γω με 5 και στην κύρια είσοδο πληκτρολόγησέ του 7 χαρακτήρες... θα μπει σε infinite loop αν δεν κάνεις έλεγχο και για '\0'.
EDIT:
Αν θέλεις να μην υπάρχει σίγουρα '\n' έτσι κι αλλιώς, αντί για fgets() διάβαζε το string με την s_get() ή ακόμα καλύτερα με την s_getflushed()... αυτές τις έχω φτιάξει έτσι ώστε εγγυημένα να μην υπάρχει '\n' στο διαβασμένο string!

{'h', 'e', 'l', 'l', '\0'}

int arr[1024];
Qdata έγραψε:Παιδιά μου δημιουργήθηκε τώρα τελευταία μια απορία.Πχ στο σύστημά μου ο τύπος δεδομένων int δεσμεύει 4 bytes από την μνήμη μου(RAM).Εγώ έχω 2GB μνήμη RAM.Τι θα γίνει αν πχ δημιουργήσω πολλούς πίνακες σαν τον παρακάτω;
- Κώδικας: Επιλογή όλων
int arr[1024];
Μπορώ να φτάσω στο σημείο ώστε να μου τελειώσει η ελεύθερη μνήμη και να μην μπορώ να χρησιμοποιώ άλλα προγράμματα;Στη συνέχεια θα πρέπει να δεσμεύσω και την Swap;Και αν γεμίσω και την κατάτμηση Swap τι γίνετε;Μπορώ να προκαλέσω τέτοια ζημιά με ένα πρόγραμμα που απλώς δημιουργεί πίνακες;

migf1 έγραψε:Το "hell" είναι Ν-1 χαρακτήρες, δηλαδή Ν μαζί με το '\0' που βάζει η fgets()... άρα το διαβασμένο σου string ισούται με:
- Κώδικας: Επιλογή όλων
{'h', 'e', 'l', 'l', '\0'}
Εκεί μέσα δεν υπάρχει πουθενά '\n', οπότε πως περιμένεις να σταματήσει ποτέ ένα loop που εκτελείται πάνω στο διαβασμένο σου string μέχρι να βρει τον χαρακτήρα '\n' ;;;;;;;;
Αυτό που κάνει λοιπόν είναι να συνεχίζει και μετά το τέλος του string σου... ε, κάποια στιγμή σε κάποιο τυχαίο byte της μνήμης θα βρει κι ένα '\n' και θα σταματήσει

{ 'h', 'e' ,'l' , '\n' , '\0' }{'h' , 'e' , 'l' , '\n' }
