我正在尝试读取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 <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;
}
答案 0 :(得分:10)
\377
是八进制转义序列,十进制255,所有位都设置。它来自将EOF
- 通常具有值-1
- 转换为char
,原因是
while (!feof(filelist)) {
feof(filelist)
只有在之后才尝试读取文件。
因此,在文件末尾,您再次进入循环,getc()
返回EOF
。
答案 1 :(得分:9)
getc()
函数返回类型int
的结果,而不是类型char
的结果。您的char ch;
应为int ch;
。
为什么会返回int
?因为它返回的值是 它刚刚读取的字符(作为unsigned char
转换为int
)或特殊值{{1} (通常为-1)表示输入错误或文件结束条件。
请勿使用EOF
功能检测输入结束。在输出后,它只返回。您对[{1}}的最后一次通话正在返回feof()
,当存储到getc()
对象时,会转换为EOF
,通常为char
。
另一个问题是(char)-1
如果输入错误,永远不会返回真值。在这种情况下,'\377'
将返回true。 feof()
返回ferror()
后使用feof()
和/或ferror()
,告诉 返回的原因{{1} }。
从文件中读取,直至到达结尾:
getc()
建议阅读:comp.lang.c FAQ的第12节。