View Full Version : [C] Devo mettere un file in un buffer
char linea[256], buf=NULL;
while ( fgets(linea,sizeof(linea),fp) != NULL)
{
buf=(char *)realloc(NULL,strlen(buf)+strlen(linea)+1);
strcat(buf, linea);
buf[strlen(buf)]='\0';
}
non mi è chiaro dove stia l'errore concettuale
scusate ma ho risolto
grazie lo stesso
char *buf=NULL, stringa[256];
buf=(char *)malloc(sizeof(char *));
while ( fgets(stringa,sizeof(stringa),fp) != NULL)
{
buf=(char *)realloc(buf,strlen(buf)+strlen(stringa)+1);
strcat(buf, stringa);
}
ad ogni modo, pensavo che la linea in grassetto la si poteva omettere ed invece se manca viene generato un errore.
Non mi piace.
In pratica stai riallocando la memoria ad ogni lettura, che è una cosa che tipicamente non si fa.
In particolare leggi il file a blocchi di 256bytes alla volta, ed inizialmente non si sa perché allochi il buffer di sizeof(char*) ovvero 4 o 8 bytes a seconda che tu stia su una architettura a 32 o a 64 bit.
Inoltre stai facendo una copia del buffer, valuta se questo effettivamente ti serve oppure se puoi lavorare in "streaming" su quei 256 bytes (oppure leggi 4K alla volta).
in streaming non posso in quanto devo poi passare il buffer completo ad una funzione NON scritta da me la quale si aspetta tutto il file completo: mistero ma è così.
Avevo pensato anche ad un'altra soluzione:
- leggo tutto il file la prima volta e determino la sua dimensione
- con la malloc assegno la memoria a buf
- con la strcat riempio buf
karch_kiraly
08-06-2012, 06:01
Senza che lo leggi tutto:
1) apri il file in binary mode
2) fai le seguenti due istruzioni:
fseek(fp, 0L, SEEK_END);
sz = ftell(fp); // sz= dimensione del file, Max 2GB
3) Con un malloc allochi lo spazio necessario
4) leggi il file
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.