PDA

View Full Version : [C] lettura dinamica di caratteri


tenbota87
17-02-2011, 12:53
ciao a tutti!!!

ho un problema con la lettura di un file..
io devo leggere un file di 250 MB che contiene n caratteri, tutti attaccati senza spazi..

avevo fatto in questo modo:


char *parola=NULL;

parola = (char*)malloc( 256 * sizeof(char));
memset(parola,0,256 * sizeof(char));

fscanf(fileTesto,"%s", parola);


solo che il mio numero di caratteri è di gran lunga superiore a 256..

come posso farlo in modo dinamico, cioè senza sapere a priori quanti caratteri andrò a leggere?

spero che qualcuno mi possa aiutare.. grazie!

tuccio`
17-02-2011, 13:19
c'è il modo comodo, cioè il memory mapping, però devi usare le api del sistema operativo, quindi perdi compatibilità, altrimenti c'è il modo lungo.. usi fgets per leggere un po' alla volta

tenbota87
17-02-2011, 15:26
forse mi sono spiegato male!
io devo leggere vari file di testo di cui 1 grande 250 MB e contiene 269484032 "a" consecutive,senza spazi..
un altro è composto da 255 "a" consecutive
uno da 256 "a" consecutive
e uno da circa un migliaio di parole di lunghezza al massimo una ventina di caratteri

la mia idea era quella di utilizzare la fscanf, ma per dichiarare il buffer di lettura devo sapere a priori quanto grande esso dev'essere mentre io devo fare un programma che funzioni con tutti i tipi di file.

l'unica alternativa che conosco è l'utilizzo della fgetc all'interno di un ciclo ma ha tempi di esecuzione molto lunghi per file molto grandi!

tuccio`
17-02-2011, 16:06
boh, mica ho capito cosa devi fare

bobbytre
17-02-2011, 20:30
puoi fare semplicemnte che leggi la dimensione del file e poi allochi la memoria in base alla dimensione


//--
FILE *file = fopen("tuo_file","rb");
fseek(file,0,2);
size_t file_size = ftell(file);
fseek(file,0,0);


char *parola = NULL;
parola = (char *)malloc(file_size * sizeof(char));
memset(parola, 0, file_size * sizeof(char));