PDA

View Full Version : [C] Lettura file


GiulioCesare
02-08-2005, 00:23
Salve ragazzi, ho un problema con la visualizzazione di una stringa letta da
un file di testo, la stringa viene visualizzata solo per metà e i restanti
caratteri, sono caratteri sporchi. Altra cosa, come posso leggere delle
stringhe, da un file, senza sapere in anticipo, quanto saranno lunghe queste
stringhe? Comunque questo è il codice, spero che qualcuno potrà aiutarmi

#include <stdio.h>
int main()
{
char buf[9],i;
char *p;

FILE *fp;

int dimensione=9,elementi=1;

fp=fopen("file.txt", "r");

if (!fp)
{
printf("Non posso aprire il file \n");
exit(1);
}


fread(buf,sizeof(dimensione),elementi,fp);
fclose(fp);

printf("%s \n", &buf);

return 0;
}

Ed_Bunker
02-08-2005, 01:18
Dipende da quanto vuoi leggere dal file.
Se vuoi leggere l'intero file puoi aprirlo ed in base alla sua dimensione crearti un buffer delle dimensioni appropriate.
Altrimenti, supponendo di non sapere nulla a priori ti crei un buffer di una dimensione arbitraria (Supponiamo 64 byte) e quindi fai un ciclo di letture in cui ad ogni passo riempi tale buffer e poi procedi leggendo i successivi fino a quando non ci sono piu' dati da leggere o fino a quando pare a te.
L'unico modo per sapere quanto e' lunga la stringa e' contarne i caratteri finche' non trovi un \0 che e' il carattere di terminazione.
Piu' velocemente puoi utilizzare la funzione strlen che passata una stringa ne restituisce la lunghezza.

tglman
02-08-2005, 10:31
Non puoi scrivere cosi:

fread(buf,sizeof(dimensione),elementi,fp);

Devi Scrivere cosi:

fread(buf,dimensione,elementi,fp);

Con il metodo che stavi utilizzando tu andavi a leggere tanti caratteri quanti e grande una variabile int (cioè 4 se lavori a 32 bit o 2 se lavori a 16 bit)
e non 9 come volevi fare...

Ricky
04-08-2005, 11:36
il fatto della stringa dipende dal problema della dimensione come dice tglman.
inoltre tu quando fai una print con una stringa devi essere sicuro che questa stringa abbia il carattere di terminazione \0.

per leggere una stringa non sapendo niente del file puoi leggere carattere per carattere nel file fino al primo \0. Memorizzi ogni volta in un buffer e lo stampi...poi passi avanti!:)

tipo

i=0;
do{
if((ret=read(fp,&carattere,sizeof(char)))!=0){;
if (carattere=='\0'){
buffer[i]='\0';
print("%s\n",buffer);
i=0;
}
else{
buffer[i]=carattere;
i++;
}
}
}while(ret!=0)