Lettura da file C

di il
3 risposte

Lettura da file C

Salve, sto scrivendo un piccolo programmino in C per esercitarmi, ma ho qualche problema....Devo leggere da file e per questo ho implementato una funzione, ma non riesco a capire perché quando passo la funzione al main mi stampa solo l'ultimo valore...qualcuno potremme darmi una mano? o dirmi se quello che ho scritto è sbagliato? Grazie

Code:

#include<stdlib.h>
#include<stdio.h>




char* function_file() {
//int main() {
FILE *fp;
char filename[60];
char *res;


char *buf=(char*) malloc(10*sizeof(char));

/* apre il file */
printf("Inserire il nome del file\n");
gets(filename); // inserisco il nome del file
fp = fopen(filename, "r"); // apro in modalità lettura

if( fp==NULL ) {
perror("Errore in apertura del file");
exit(1);
}


/* legge e stampa ogni riga */

while(!feof(fp)) { // finché non sono a fine file, leggo
res=fgets(buf,sizeof(buf), fp);

if( res==NULL )
break;


}


/* chiude il file */
fclose(fp);

return buf;
}




int main() {


char *buf = function_file();

printf("%s", buf);
free(buf);
return 0;
}

3 Risposte

  • Re: Lettura da file C

    Se nella funzione leggi tutto il file all'interno del ciclo è normale che all'uscita tu abbia solamente gli ultimi dati. Del resto tu allochi solamente 10 byte nel buffer e utilizzi sempre gli stessi caratteri riscrivendoli in memoria.

    Fra l'altro, la

    sizeof(buf)

    non restituisce 10 come puoi pensare ma 4 perché è la size del puntatore buf.
  • Re: Lettura da file C

    Quindi al posto di 10, devo sostituire il numero di righe che ho nel file??? E quindi devo leggere una riga per volta e ritornare buf nella funzione....
  • Re: Lettura da file C

    Un buffer è fatto da byte, non da righe.

    Quindi al posto di 10 devi usare la lunghezza del file in byte e la lettura avviene con una sola fgets senza ciclo while.
Devi accedere o registrarti per scrivere nel forum
3 risposte