Δημοσιεύτηκε: 16 Φεβ 2012, 19:40
Star_Light έγραψε:Αν ρε παιδι μου εχεις εξαρχης ορισει εσυ σε ενα προγραμμα το μέγιστο μήκος ενος string
και μετα καλεις την calloc για να κατανείμεις μνημη για αυτο. ΑΝ τωρα ο χρηστης δεν δωσει οσο ειναι αυτο
αλλα δωσει μικροτερο μηκος... τοτε ο χωρος που μενει αδειος τι γινεται? απλα έχει γεμισει απο πριν με τους κενους
χαρακτηρες και στο τελος γινεται free ετσι? ενω σε εναν πινακα δεν θα γινοταν (στατικο) οποτε εδω κολλαει το δυναμικο
Και πάλι δεν καταλαβαίνω. Καταρχήν δεν είσαι υποχρεωμένος να δημιουργήσεις το string προκαταβολικά, μπορείς να το δημιουργήσεις εάν, όταν και στο μέγεθος που θα σου ζητήσει ο χρήστης. Έπειτα ο ορισμός ενός δείκτη: char *s δεν δημιουργεί string, δημιουργεί ένα δείκτη που δείχνει σε undefined περιοχή μνήμης. Το string το δημιουργεί η ανάθεση του δείκτη στη τιμή επιστροφής της malloc() ή της calloc(). Για την ακρίβεια η malloc()/calloc() δεσμεύουν το κομμάτι της μνήμης που ζήτησες, και με την ανάθεση της τιμής επιστροφής τους στον δείκτη σου τον βάζεις να δείχνει σε εκείνη τη μνήμη.