|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2004
Messaggi: 364
|
[C] Lettura file
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 Codice:
#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;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9475
|
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.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
Non puoi scrivere cosi:
Codice:
fread(buf,sizeof(dimensione),elementi,fp); Codice:
fread(buf,dimensione,elementi,fp); e non 9 come volevi fare... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 1999
Città: Milano
Messaggi: 531
|
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 Codice:
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)
__________________
Vintage signature: Abit nf7-s, Xp 2500+@2300mhz, 256 mb 418mhz cas2, geforce fx5700,S-ATA 160 Maxtor,Lg gsa 4120b...prima..ma ora..DELL INSPIRON 6400, ATI X1300... Ultima modifica di Ricky : 04-08-2005 alle 12:37. Motivo: errori vari |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:30.


















