Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - devo leggere il contenuto di un file txt...
Forum - C/C++ - devo leggere il contenuto di un file txt...

Avatar
bip (Normal User)
Rookie


Messaggi: 36
Iscritto: 22/04/2008

Segnala al moderatore
Postato alle 21:58
Domenica, 11/01/2009
io ho usato questo codice:
#include<stdio.h>
#include<iostream>
#include<string.h>

using namespace std;
main(){
    char str[1000000];
    int i=0;
    FILE *p;
  
    if((p=fopen("myfile.txt","r"))==NULL){
        cout<<"errore\n";
        }
    else
    {
        while (feof(p)==0)
        {
            fread(&str,sizeof(p),1,p);
            i++;
        }
      
        str[--i]='\0';
        cout<<str<<endl;
      
        fclose(p);
    }
  
    system("pause");
}

ma mi legge solo una piccola parte come mai esiste una sintassi migliore che mi garantsca di stamparmi a video tutto il contenuto del file (usand la funzione fread)?
P.s. il file č di 3k di dimensione
:ot::alert::ot:

Ultima modifica effettuata da bip il 11/01/2009 alle 22:01
PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 10:23
Lunedė, 12/01/2009
Testo quotato

Postato originariamente da bip:
Codice sorgente - presumibilmente C/C++

  1. while (feof(p)==0)
  2.         {
  3.             fread(&str[i],sizeof(p),1,p);
  4.             i++;
  5.         }



cosė non funziona.
sizeof(p) restituisce la dimensione del puntatore a FILE.

per farlo funzionare devi mettere 1 al posto di sizeof(p), cosė leggi un byte alla volta. Inoltre non fai nessun controllo di non superare la dimensione del buffer.

in alternativa puoi togliere la while e leggere il buffer in un colpo solo:      
Codice sorgente - presumibilmente Plain Text

  1. size_t nread = fread(str,sizeof(char),sizeof(str)/sizeof(char),p);



e poi controllare il valore nread.






Ultima modifica effettuata da gioser il 12/01/2009 alle 10:24
PM Quote