Δημοσιεύτηκε: 16 Φεβ 2012, 17:35
από migf1
Star_Light έγραψε:Οταν έχω
Spoiler: show
Κώδικας: Επιλογή όλων


#define MAXSLEN (80 + 1)

...
int main()
{
char s1[MAXSLEN] = {'\0'};


και

Κώδικας: Επιλογή όλων


char *s1 = {'\0'};

....
printf( " Give MAXSLEN : ");
.....
s= malloc( MAXSLEN + 1 ) ;

....



Α) Τοτε στην 1η στατική περιπτωση δηλωσης ενος string άν εγω δωσω λέξη μήκους 60 τα 20 έχουν δεσμευτεί στην μνήμη και μένουν αχρησιμοποίητα?

21 έχουν δεσμευτεί κι έχουν μείνει αχρησιμοποιητα
έγραψε:
Β) Δινω ακριβως στο 2ο παράδειγμα την μνήμη που θέλω να δεσμευτεί καθε φορα μεσω της MAXSLEN

Όχι κάθε φορά, την 1η μόνο φορά, αργότερα μπορείς να το κάνεις realloc() σε διαφορετικό μέγεθος. Επίσης είναι τελείως λάθος αυτό που έχεις γράψει για το δυναμικό s! Το σωστό είναι έτσι...

Κώδικας: Επιλογή όλων

char *s1 = NULL;
...
s1 = calloc( MAXSLEN, sizeof(char));
if ( !s ) {
// handle the error here
}
...
free(s);


Το αν θα το φτιάξεις αρχικά με MAXSLEN ή με κάποιο νούμερο που θα σου δώσει χρήστης είναι δική σου απόφαση.