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:
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);
}
Lettura da file binario:
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);
}
}
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.
Vi ringrazio in anticipo,
Neptune.