|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
[C] Devo mettere un file in un buffer
Codice:
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';
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
scusate ma ho risolto
grazie lo stesso |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
Codice:
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);
}
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12923
|
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). |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
|
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 |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Nov 2005
Messaggi: 96
|
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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:00.


















