\377 caractères en c
je suis en train de lire un fichier en c.
j'ai un .les fichiers txt et elle a que le contenu:
file_one.txt file_two.txt file_three.txt file_four.txt
lorsque je tente de lire ce fichier avec fopen j'obtiens ce résultat:
file_one.txt file_two.txt file_three.txt file_four.txt\377
ce n' \377 veux dire? Voici mon code.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]){
FILE *filelist;
char ch;
filelist=fopen("file-path", "rt");
while (!feof(filelist)) {
ch = getc(filelist);
printf("%c",ch);
}
fclose(filelist);
return 0;
}
OriginalL'auteur saidozcan | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
La
getc()
fonction renvoie un résultat de typeint
, pas de typechar
. Votrechar ch;
devrait êtreint ch;
.Pourquoi est-il le retour d'un
int
? Parce que la valeur qu'elle renvoie est soit le personnage qu'il vient de lire (comme ununsigned char
converti àint
) ou la valeur spécialeEOF
(généralement -1) pour indiquer une erreur de saisie ou de fin de fichier de condition.De ne pas utiliser le
feof()
fonction de détecter la fin de l'entrée. Elle renvoie vrai que après vous avez épuisé d'entrée. Votre dernier appel àgetc()
est de retourEOF
, qui lorsque stockés dans unchar
objet est converti(char)-1
, qui est généralement'\377'
.Un autre problème est que
feof()
sera jamais retourner la valeur true si il y avait une erreur d'entrée; dans ce cas,ferror()
retournera true. Utilisationfeof()
et/ouferror()
aprèsgetc()
retourneEOF
, pour dire pourquoi il est retournéEOF
.À lire à partir d'un fichier jusqu'à ce que vous atteignez la fin de celui-ci:
Suggestions de lecture: l'Article 12 de la comp.lang.c FAQ.
ne ch variable contient la valeur ascii de char à chaque étape de la lecture?
Oui (en supposant que le système utilise l'ASCII).
OriginalL'auteur Keith Thompson
La
\377
est octal séquence d'échappement, décimal 255, tous les bits définis. Il s'agit de la conversion deEOF
- qui a généralement la valeur-1
à unchar
, en raison defeof(filelist)
seulement de devenir vrai après vous avez essayé de lire au-delà des fichier.Donc, à la fin du fichier, vous entrez dans la boucle une fois de plus, et la
getc()
retourneEOF
.OriginalL'auteur Daniel Fischer