Ho incontrato lo stesso identico problema quando ho fatto la mia agenda elettronica,se tu vuoi scrivere i dati sul file in modo da poi poterli rileggere ordinatamente,una tecnica è di trattare il file riga per riga.
Ho costruito una funzione apposita,che può leggere da qualsiasi file,questa funzione alloca dinamicamente la memoria necessaria a ospitare l' intera stringa.La stringa viene letta finchè non incontra il carattere newline,ed aggiunge il terminatore automaticamente,diviene a tutti gli effetti una stringa allocata sull' heap da liberare successivamente:
Usando questa funzione leggo tutti i dati da file,scritti riga per riga.codice:char *input (FILE *fp) { char *buffer; char checker; int size=1; buffer=(char*)malloc(sizeof(char)); if(buffer==NULL) { printf("Errore di allocazione della memoria"); exit(1); } while((buffer=getchar())!=10) { buffer[size-1]=checker; size++; buffer=(char*)realloc(buffer,size*sizeof(char)); if(buffer==NULL) { printf("Errore di allocazione della memoria"); exit(1); } } buffer[size-1]='\0'; fflush(stdin); }
Poi quando vado a scrivere una stringa con fprintf aggiungo la newline:
E leggo tranquillamente come leggessi da stdin.codice:fprintf(fp,"%s\n",stringa);
Poi nella struttura per identificarle puoi aggiungere un intero che le identifica,ad esempio ogni struttura ha un serial number,a seconda del numero di righe che ha una struttura capisci quante righe dovrai leggere.
Se tutte le strutture ad esempio hanno 7 righe,leggi 7 stringhe prima di passare a leggere la successiva.

Rispondi quotando