2009-05-13 13 views
2

J'utilise FICHIER * F ouvert dans _sfopen() Je lis depuis le fichier dans while (! Feof (f)) et puis fgets (str, 1024, f) quand la course atteint la dernière ligne, elle continue quand même mais en essayant de la fuir, elle vole avec une violation de violation d'accès (menwhile j'ai juste essayé et attrapé (...) mais je sais que ce n'est pas une bonne solution) que dois-je changer pour résoudre le problème? De plus, si je veux lire ligne par ligne, est-ce correct de donner la taille de 1024 ou il pourrait échouer - j'avais un fichier où, en raison de la taille, il lisait chaque fois à partir du milieu d'une ligne jusqu'à au milieu de la ligne suivante - est-il un meilleur moyen de lire une ligne parce que je n'ai aucune idée de comment mes fichiers vont ressembler (si le \ n ont à la fin etc ...)Lire à partir d'un fichier en utilisant fgets() provoque "Violation d'accès de lecture d'adresse ..." C++

merci!

+6

Veuillez poster votre code que vous utilisez. –

+0

Avez-vous une raison particulière d'utiliser FILE au lieu de std :: ifstream? – Jem

+0

char buf [1024], * p; while (fgets (buf, sizeof (buf), fp)! = NULL) { faire quelque chose ... } – sofr

Répondre

0

Vous avez spécifié C++ comme balise, utilisez peut-être un flux de fichiers (std :: ifstream pour l'entrée du fichier) et la fonction globale getline() pour l'obtenir ligne par ligne et l'insérer dans une chaîne std :: pour analyse/manipulation.

Pour un exemple regarder here (2ème exemple dans le paragraphe « fichiers texte »)

0

Regardez here - en particulier la section «mises en garde».

3

Si vous ne lisez pas avant la while(!feof(f)) il est brisé depuis le drapeau EOF ne soit pas réglée avant après une lire a été fait. Au lieu de cela faire quelque chose comme ceci:

char buf[1024]; 
while(fgets(buf, sizeof(buf), f)) { 
    /* process the line */ 
} 

Depuis fgets est définie pour renvoyer NULL soit non lu ou EOF.

Si vous faites cela en C++, alors je recommande un modèle similaire (mais en utilisant C++ iostreams à la place).

std::ifstream file("filename.txt"); 
std::string line; 
while(std::getline(file, line)) { 
    // process the line 
} 
Questions connexes