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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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!
Partager