Adesso ho capito,perchè in realtà la stringa name non sai che dimensioni ha.
Anche se tu gli dai lo spazio per 30 caratteri,le stringhe in C sono trattate diversamente dai dati normali.
Una stringa è una sequenza di caratteri,il compilatore non sa quando fermarsi.
Alla fine della stringa,che è una sequenza di caratteri,per contrassegnare la fine della stringa si mettere il carattere terminatore,che ha come valore zero.
Ad esempio :
codice:
char name[30];
...
strcpy(name,"lady"); // la lunghezza della stringa è 5 caratteri,anche se hai allocato 30 byte occupa 5 byte,perchè
// gli altri byte sono non utilizzati
...
strcpy(name,"elisabetta"); // la lunghezza adesso è cambiata, la stringa è lunga 11 byte,10 char + il terminatore
Diciamo adesso che tu scrivi la struttura su un file.
Se tu adesso vuoi modificare il file cambiando il nome della stringa, la dimensione della stringa sarà diversa,perchè la stringa elisabetta occupa 11 byte,mentre l' altra ne occupava 5.Ecco perchè va riscritto daccapo,le dimensioni sono cambiate.
La macchina non sa quando fermarsi a leggere,nemmeno a scrivere una stringa.Per cui si ferma quando incontra il terminatore.Graficamente il carattere terminatore non si vede neanche,con le funzioni di output non viene nemmeno stampato e se provi a stamparlo è praticamente invisible per cui non ha "effetti collaterali".