Ho bisogno di leggere un file e salvarlo in una stringa.
Del file non so la grandezza quindi parto da:
char *testo;
qualcuno mi completa il codice please ?![]()
Ho bisogno di leggere un file e salvarlo in una stringa.
Del file non so la grandezza quindi parto da:
char *testo;
qualcuno mi completa il codice please ?![]()
Penso che l'unica soluzione sia creare un array di caratteri di dimensione statica (grande), leggere il file e poi copiare i campi inseriti nell'array in uno di dimensioni appropriate.
se no la realloc ma sono impazzito
se qualcuno sa usarla meglio di me.. benvenga
con realloc verrebbe una cosa del genere credo:
FILE* fp;
char* testo,*temp;
int i=0;
fp=fopen("pippo.txt","r");
testo=(char*) malloc(sizeof(char));
while(fscanf(fp,"%c",&temp)!=EOF) {
testo=(char*) realloc(testo,(i+1)*sizeof(char));
*(testo+i)=temp;
i++;
}
testo[i]='\0';
Ciao, dico anche la mia.Originariamente inviato da uMoR
se no la realloc ma sono impazzito
se qualcuno sa usarla meglio di me.. benvenga![]()
Visto che la dimensione del file è nota a priori credo che sia meglio una malloc():
La realloc() è abbastanza lenta, meglio evitarla se possibile.codice:// MinGW code #include <iostream> //per il BCC32: // #include <iostream.h> #include <conio.h> int main() { FILE *file; char ch, *buff, FileName[256]="pippo1.txt"; int indice, fileDim = 0; if (( file = fopen( FileName, "rb")) != NULL) { // 'Conto quanti bytes ci sono nel file while( ! feof( file ) ) { fgetc( file ); fileDim++; } fileDim--, printf("Dimensione del file %s = %d\n", FileName, fileDim); // Alloco la memoria necessaria per contenere il file +1 buff = (char*) malloc(sizeof(char) * fileDim+1); // Mi riporto all' inizio del file fseek(file, 0, SEEK_SET); for(indice=0; indice<fileDim; indice++) { buff[indice] = fgetc( file ); } printf("Contenuto del file :\n%s", buff); fclose(file); } getch(); return 0; }
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
Naturalmente potresti anche eliminare questo ciclo:
con una fread() ...codice:for(indice=0; indice<fileDim; indice++) { buff[indice] = fgetc( file ); }
che si occupa di copiare tutto il file nel buffer.codice:fread(buff, fileDim, 1, file);
![]()
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
Prometto che è l'ultima versione![]()
Sicuramente la più compatta:
codice:#include <iostream> #include <conio.h> int main() { FILE *file; char ch, *buff, FileName[256]="pippo1.txt"; int indice, fileDim = 0; if(( file = fopen( FileName, "rb")) != NULL) { // Si posiziona alla fine del file fseek(file, 0, SEEK_END); // Legge la posizione attuale fileDim = ftell(file); // Alloca la dimensione del buffer buff = (char*) malloc(sizeof(char) * fileDim+1); printf("Dimensione del file %s = %d\n", FileName, fileDim); // Mi riporto all'inizio del file fseek(file, 0, SEEK_SET); // Copio tutto il contenuto del file nel buffer fread(buff, fileDim, 1, file); printf("Contenuto del file :\n%s", buff); // Chiudo il file fclose(file); } getch(); return 0; }![]()
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
grazie a tutti l'ultimo funziona alla perfezione![]()