La faccenda è questa:
fread non conosce il formato del buffer che gli passi. Lui vede quel buffer solamente come un insieme di size bytes.codice:size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
La funzione legge tot byte dal file e copia byte-byte il buffer letto nel buffer che gli passi.
Se tu passi una struttura de genere:
anche se poi allochi nome quel char* nome è sempre una variabile long (ovvero mantiene in se un indirizzo di memoria di 4 byte) e quella struttura è quindi di 14 byte.codice:struct anag { char* nome; char cognome[10], };
Se tu scrivi sul file questa stringa "Dante Alighieri", quando l'andrai a leggere con fread in quella struttura, la funzione scriverà byte per byte, quindi avrai una struttura danneggiata che conterrà al posto di char* nome char nome[4], metterà "e " nei primi due posti di cognome e poi troncherà "Alighieri".
quando vuoi leggere 20 byte da un file binario, devi passargli precisamente una struttura di 20 byte.

Rispondi quotando