Et pourtant je vois pas d'erreur apparentes ...
Stange
A mon avis, c'est cette portion de code qui foire tout. En fait, je teste la fin de fichier (feof(file)) une fois que la lecture est faite (fread).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 while(done){ taille = (int) fread(buff,1,BUFFSIZE,file); if(ferror(file)){ fprintf(stderr,"fread error\n"); exit(-1); } done = feof(file); if(XML_Parse(p,buff,taille,done) == XML_STATUS_ERROR){ fprintf(stderr,"Error at line %" XML_FMT_INT_MOD "u:\n%s\n",XML_GetCurrentLineNumber(p),XML_ErrorString(XML_GetErrorCode(p))); exit(-1); } }
Remplace le while (done) par while (feof(file)).
Ca marche?
feof() ne s'utilise pas ainsi, ni de la façon décrite par publicStaticVoidMain.
Et je pense que le while devrait être écrit while(!done).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Parce que « while » veut dire « tant que », « done », ça veut dire « fait », « terminé ». Et ce que l'on veut, c'est que la boucle tourne tant que l'on n'a pas fini.
Ça colle avec le feof() associé à la variable en question. La fonction renvoie une valeur non-nulle dès lors que l'on a atteint la fin du fichier.
Les fonctions feof() et ferror() ne doivent être appelées qu'après l'échec de fread().
Donc, seulement si taille est inférieure à BUFFSIZE.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager