Re: lettura files e array dinamici
Von: dragonet (dennistogliquesto.pavesi@fastwebnet.it) [Profil]
Datum: 15.07.2008 23:09
Message-ID: <Hm8fk.8940$p07.2019@tornado.fastwebnet.it>
Newsgroup: it.comp.lang.c
Datum: 15.07.2008 23:09
Message-ID: <Hm8fk.8940$p07.2019@tornado.fastwebnet.it>
Newsgroup: it.comp.lang.c
Remo D. ha scritto: > dragonet ha scritto: > >> è possibile in C creare un array dinamico? > > La risposta "breve" è NO! La risposta più lunga prevede l'uso di > realloc() per allocare un blocco di memoria di dimensione sempre > maggiore da usare come array. > > Comunque, nel tuo caso (contare quanti caratteri ci sono in un file) ti > serve un array: usa fgetc() e leggi il file un carattere alla volta. > > Altrimenti puoi usare fseek() per spostarti alla fine del file e ftell() > per ottenere la posizione (ma il risultato non è garantito) oppure usare > la stat() (ma non è C standard). > > Qalche osservazione: > - Se ti interessa la lunghezza del file devi aprire il file con "rb" e > non con "r" altrimenti potresti avere problemi con gli "a capo" dei file > in formato DOS (se invece vuoi solo sapere il numero di "caratteri" puoi > usare anche "r"). > > - Dopo la fopen() controlla di aver aperto veramente il file. Il fatto > il file esista non vuol dire che la fopen() non possa fallire > > - Usare la fread va anche bene ma se il tuo file è piu' lungo > dell'array dovresti mettere i += conta_caratteri altrimenti memorizzi > solo la dimensione dell'ultimo blocco letto. (ovviamente devi > inizializzare "i" prima). > > - Dopo la fread() dovresti usare la feof() (o la ferror()) per capire > se hai veramente raggiunto la fine del file o se c'e' stato un errore in > lettura. > > - main puo' essere: > int main(void); > oppure > int main(int argc, char *argv[]); > ma non: > main(); > > - I commenti con // sono solo C99 (ed ho un'avversione speciale per i > commenti "alla C++", ma de gustibus ...) > > Se ridai un'occhiata al tuo programma sono sicuro che troverai altri > spunti per migliorarlo. > > R.D. > > > > > Grazie per la risposta, ma ci sono cose che non capisco (premetto che sono alle prime armi): perchè dici di leggerlo un carattere alla volta? Io voglio che il contenuto del file venga salvato in un contenitore (come un array appunto) per poter poi essere manipolato (non so ancora per quale scopo, è solo un'idea per adesso). Per quale motivo non posso scrivere main()? E' solo una questione di stile? Mi sembra che debba essere obbligatoriamente (void) solo in C++ (linguaggio che ancora non ho studiato). int argc, char *argv[] ho letto serve per i tipi derivati dei puntatori, giusto? Per quanto riguarda i commenti: //commento// /*commento*/ come dici tu è solo questione di preferenze :-)[ Auf dieses Posting antworten ]
Antworten
- Remo D. (16.07.2008 08:45)
