je reviens sur un problème qui me traine en tête depuis
longtemps.
Le coeur du pb, c'est "comment détecter la fin de fichier
si sizeof(int)==1" ?
Commençons par dire qu'il ne peut pas y avoir de "trap value"
dans un unsigned char, ie il peut représenter toutes
les valeurs dans 0..2^(CHAR_BITS-1).
Mais bon, avec sizeof(int)==1, on va avoir des entiers qui
représentent au plus 2^CHAR_BITS valeurs.
Or, fgetc, getc, getchar retourne un int qui est soit un
unsigned char convertit en int, soit EOF.
Mais bon, sur une telle implentation, si j'écrit EOF
dans un fichier, comment je fais pour le retrouver ?
int i=EOF;
unsigned char* p=&i; // J'ai le droit
FILE* f= fopen("toto.txt", "w");
assert(f);
fwrite( p, sizeof(i) , 1, f);
fclose(f);
f= fopen("toto.txt", "r");
int c= fgetc(f);
// Et là, c, il vaut quoi ?
Bon, ok, si j'ai pas la réponse, ça devrait pas changer
trop mon quotidien, mais bon, à chaque fois que j'enseigne
le coup du "EOF hors de l'espace de représentation de char",
je pense à nos cartes DSP où char et int font 32 bits...
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)
"Jean-Marc Bourguet" a écrit dans le message de news:
Jean-Marc Bourguet writes:
Jean-Marc Bourguet writes:
je viens de tester mais j'ai un resultat qui m'etonne,
Apres analyse, j'ai decide de poser la question sur comp.std.c.
Pour info pour ceux qui ne sont pas alle voir, c'est bien un bug. 7.19.3/11 impose que toute lecture soit faite comme si on utilisait fgetc et fgetc echoue si le marqueur de fin de fichier est mis.
Note historique: le comportement traditionnel etait bien celui que j'ai observe sur Linux et Solaris mais la norme a toujours demande le comportement que je trouve plus coherent.
la question concernait specifiquement le comportement de fgets, la question concernant fgetc/getc reste ouverte.
-- Chqrlie.
"Jean-Marc Bourguet" <jm@bourguet.org> a écrit dans le message de news:
pxbhcfjlyvk.fsf@news.bourguet.org...
Jean-Marc Bourguet <jm@bourguet.org> writes:
Jean-Marc Bourguet <jm@bourguet.org> writes:
je viens de tester mais j'ai un resultat qui m'etonne,
Apres analyse, j'ai decide de poser la question sur comp.std.c.
Pour info pour ceux qui ne sont pas alle voir, c'est bien un bug.
7.19.3/11 impose que toute lecture soit faite comme si on utilisait fgetc
et fgetc echoue si le marqueur de fin de fichier est mis.
Note historique: le comportement traditionnel etait bien celui que j'ai
observe sur Linux et Solaris mais la norme a toujours demande le
comportement que je trouve plus coherent.
la question concernait specifiquement le comportement de fgets, la question
concernant fgetc/getc reste ouverte.
"Jean-Marc Bourguet" a écrit dans le message de news:
Jean-Marc Bourguet writes:
Jean-Marc Bourguet writes:
je viens de tester mais j'ai un resultat qui m'etonne,
Apres analyse, j'ai decide de poser la question sur comp.std.c.
Pour info pour ceux qui ne sont pas alle voir, c'est bien un bug. 7.19.3/11 impose que toute lecture soit faite comme si on utilisait fgetc et fgetc echoue si le marqueur de fin de fichier est mis.
Note historique: le comportement traditionnel etait bien celui que j'ai observe sur Linux et Solaris mais la norme a toujours demande le comportement que je trouve plus coherent.
la question concernait specifiquement le comportement de fgets, la question concernant fgetc/getc reste ouverte.