\ 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
? 因为它返回的值是它刚读取的字符(作为转换为int
的unsigned 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
。