\ c中377个字符

我想在c中读取一个文件。 我有一个.txt文件,它有这个内容:

file_one.txt file_two.txt file_three.txt file_four.txt

当我尝试使用fopen读取此文件时,我得到此输出:

file_one.txt file_two.txt file_three.txt file_four.txt \ 377

什么是\ 377是什么意思? 这是我的代码。

#include  #include  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; } 

getc()函数返回int类型的结果,而不是char类型的结果。 你的char ch; 应该是int ch;

为什么它返回一个int ? 因为它返回的值是它刚读取的字符(作为转换为intunsigned char特殊值EOF (通常为-1),以指示输入错误或文件结束条件。

不要使用feof()函数来检测输入的结束。 只有输入用完后才会返回true。 你对getc()最后一次调用是返回EOF ,当存储到char对象时,它被转换为(char)-1 ,通常为'\377'

另一个问题是,如果输入错误, feof()永远不会返回真值; 在这种情况下, ferror()将返回true。 getc()返回EOF 之后使用feof()和/或ferror()来告诉它返回EOF

要从文件中读取,直到它到达结尾:

 int ch; while ((ch = getc(filelist)) != EOF) { /* ch contains the last character read; do what you like with it */ } 

建议阅读: comp.lang.c FAQ的第12节。

\377是一个八进制转义序列,十进制255,所有位都设置。 它来自于将EOF (通常值为-1 )转换为char ,因为

 while (!feof(filelist)) { 

feof(filelist)只有您尝试读取文件才会变为true。

所以在文件的末尾,再次进入循环, getc()返回EOF