Salve a tutti,
ho due funzioni una di salvataggio su file binario ed una di successiva lettura.
Il problema è che in fase di lettura, il ciclo for che lavora con la funzione feof() esegue una lettura di troppo, ovvero, l'ultimo elemento del file binario (che come tale è formato da elementi tutti della stessa grandezza) viene letto due volte.
Per completezza vi allego il codice delle due funzioni:
Scrittura su file binario:
Lettura da file binario:codice:void salva_binario(FILE *f) { struct StringPool_TAPPOGGIO appoggio; int index; int n=0; //Finchè non si arriva all'ultima posizione della struttura sp for(index=0 ; index<NUMEROMASSIMOELEMENTISP ; index++) { //Se l'id è diverso da -1 e quindi la posizione è vuota if(sp.identifier[index]!=-1) { //Scrive su file identifier e stringa appoggio.identifier = sp.identifier[index]; strcpy(appoggio.str,sp.str[index]); fwrite(&appoggio,sizeof(struct StringPool_TAPPOGGIO),1,f); //fwrite(&sp.identifier[index],sizeof(int),1,f); //fwrite(sp.str[index],sizeof(char),COST_NUM_CHAR,f); } } fwrite('\0',sizeof(char),1,f); }
Come potete notare nella fuznione di caricamente ho fatto una printf di debug dell'indice che mi stampa quante volte mi esegue il ciclo, ed effettivamente me lo esegue una volta in più e non saprei come risolvere.codice:void carica_binario(FILE *f) { int index; char appo[COST_NUM_CHAR]; struct StringPool_TAPPOGGIO appoggio; //azzera la struttura sp for(index=0 ; index<NUMEROMASSIMOELEMENTISP ; index++) { sp.identifier[index]=-1; strcpy(sp.str[index],""); } //finchè non si arriva alla fine del file binario for(index=0; feof(f) == 0; index++) { //Legge l'identifier e i COST_NUM_CHAR della stringa fread(&appoggio,sizeof(struct StringPool_TAPPOGGIO),1,f); sp.identifier[index] = appoggio.identifier; strcpy(sp.str[index], appoggio.str); //debug printf("%d",index); } }
Vi ringrazio in anticipo,
Neptune.


Rispondi quotando