A mon avis, c'est la fin de fichier qui est mal géree !!
A voir !!
Version imprimable
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:
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).
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.
J'écoute qui moi la dedans ...
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.