problème: fgetc sur char 26 (=SUB) => EOF :(
Bonjour, je perd du temps pour un problème que je n'arrive pas à comprendre, j ai googler en vain sans résultat.... donc je m en remet à vous :P
Je travaille sur windows2000 avec Dev-C++.
C'est pour faire marcher un programme de codage de Huffmann que j'essaie de cerner/corriger ce bug (ce n'est pas important de le savoir)
Donc le bug c'est lorsque l'on fait fgetc(F) avec F (fichier ouvert en lecture) qui se situe juste avant le char 26 qui est SUB. Normalement, je m'attend à ce que le fgetc(F) renvoie 26... mais hélas il renvoie EOF :(.
Il se peut que ce problème n'existe pas avec Unix....
Quoiqu'il en soit, le code ci-dessous éxécuté chez moi montre qu'à la tentative de lecture du char 26, fgetc renvoie EOF ...
Donc pourquoi? Comment corriger ce bug ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main (void)
{
/* preuve du bug que fgetc renvoie EOF si il doit lire le char 26 (SUB) :( */
FILE * F;
int e;
if ((F = fopen("test.txt","w")) == NULL) printf("erreur d ouverture!\n");
if (fputc(54,F) == EOF) printf("erreur d ecriture!\n");
if (fputc(26,F) == EOF) printf("erreur d ecriture!\n");
if (fputc(52,F) == EOF) printf("erreur d ecriture!\n");
if (fclose(F) == EOF) printf("erreur de fermeture!\n");
if ((F = fopen("test.txt","r")) == NULL) printf("erreur d ouverture!\n");
if ((e = fgetc(F)) == EOF) printf("impossible de lire le fichier!\n");
else printf("caractere lu: int: %d char: %c\n",e,e);
if ((e = fgetc(F)) == EOF) printf("impossible de lire le fichier!\n"); /* impossible */
else printf("caractere lu: int: %d char: %c\n",e,e);
if ((e = fgetc(F)) == EOF) printf("impossible de lire le fichier!\n");
else printf("caractere lu: int: %d char: %c\n",e,e);
if (fclose(F) == EOF) printf("erreur de fermeture!\n");
while(1);
} |
Code:
1 2 3 4 5
|
qui à l'éxécution donne:
caractere lu: int: 54 char: 6
impossible de lire le fichier!
impossible de lire le fichier! |
Re: problème: fgetc sur char 26 (=SUB) => EOF :(
Citation:
Envoyé par Sakijep
Donc le bug c'est lorsque l'on fait fgetc(F) avec F (fichier ouvert en lecture) qui se situe juste avant le char 26 qui est SUB. Normalement, je m'attend à ce que le fgetc(F) renvoie 26... mais hélas il renvoie EOF :(.
26 est le code ASCII de ^Z, c'est à dire le caractère marqueur de fin de fichier texte MS-DOS/Windows. Pour qu'il soit ignoré, il faut lire ton fichier en mode binaire "rb").
http://emmanuel-delahaye.developpez....=Page6#LXXXIII