Ho un esercizio nella quale devo creare una funzione:La funzione accetta come parametro un nome di file che deve essere aperto in lettura in modalità tradotta (testo) e un puntatore ad una variabile di tipo unsigned int in cui si dovrà inserire il numero di libri presenti in un file così strutturato: ;;codice:extern struct libro *read_libri (const char *filename, unsigned int *pn);
La funzione deve ritornare un puntatore ad una nuova zona di memoria (allocata dinamicamente nell’heap) contenente tutti i libri letti dal file. Il numero di libri non è noto a priori e non può essere vincolato dal codice.Ho come risultato un ciclo infinito, non riesco a capire il perché,come posso fare?codice:extern struct libro *read_libri (const char *filename, unsigned int *pn){ FILE *f; f=fopen(filename,"rt"); if(f==NULL) exit(EXIT_FAILURE); struct libro *lib=NULL; int i=0; while(feof(f)==0){ lib=(struct libro *)realloc(lib,(i+1)*sizeof(struct libro)); fscanf(f,"%u;%s;%u",&lib[i].codice,lib[i].titolo,&lib[i].pagine); i++; } return lib; fclose(f); free(lib); }
NOTA: Devo utilizzare un compilatore Pelles c.