Star_Light έγραψε:Δηλαδη για να καταλάβω η μονη διαφορα με τους στατικους ειναι οτι πριν ας πουμε δέσμευες 80+1 και το χρησιμοποιούσες βρέξει χιονισει?
ενω εδω με την calloc δεσμέυεις κατα το runtime οσο χρειαστει ? Αλλα αυτο που καθε φορα χρειαζεται δεν μπορει να ειναι πανω απο ΜΑΧSLEN?
Σε στατικούς το (80+1) δεν μπορεί να αλλάξει, σε δυναμικούς το αυξομειώνεις όσο θέλεις, όποτε θέλεις με
realloc(). Επίσης στους στατικούς το όνομα-δείκτης τους δεν μπορεί να χρησιμοποιηθεί ως LVALUE, ενώ στους δυναμικούς μπορεί.
έγραψε:Επισης εγω νομιζα πως μέγιστο μήκος ενος string ειναι ιδια έννοια με το μέγεθος ενος string ειμαι λαθος έτσι? και αν ναι γιατι???
Στα strings επειδή ένας χαρακτήρας έχει μέγεθος 1 byte (αν κι αυτό έχει πάψει να είναι εγγυημένο, νομίζω από την C99 και μετά) εκεί όντως το μέγεθος είναι ίσο με μέγιστο μήκος. Αν όμως ένας compiler δεν μεταφράζει το char σε 1 byte (πράγμα εξαιρετικά σπάνιο) τότε παύουν να ισοδυναμούν αυτοί οι 2 όροι.
Το πιο εύκολο παράδειγμα είναι ένα πίνακας από int, μιας και ο int καταλαμβάνει εγγυημένα τουλάχιστον 2 bytes σε όλους τους compiler. Οπότε, αν π.χ. στο σύστημά σου ο int καταλαμβάνει ας πούμε 4 bytes, τότε ένας πίνακας 10 ακεραίων έχει μέγιστο μήκος ίσο με 10 στοιχεία (χαρακτήρες αν είναι string) αλλά μέγεθος ίσο με 10x4 = 40 bytes.
έγραψε:επισης μεσα στον κωδικα το if στα δεικτακια s1 και s2 πχ
- Κώδικας: Επιλογή όλων
if( !s1 && !s2)
{
printf(" * Error * ");
return;
}
Ποτε επιστρεφει ακριβως error σε εισοδο χρηστη εννοω. Εκτος και αν ειναι θεμα εσωτερικα στο συστημα και δεν καταφερει να υλοποιησει τους δεικτες ?

Αυτός ο έλεγχος εγγυάται πως το πρόγραμμά σου δεν θα κρασάρει αν έστω και κατά λάθος σε κάποιο σημείο του κώδικά σου περνάς κάποιο από τα s1, s2 ή και τα 2 ως NULL στην εν λόγω συνάρτηση.