我想读在C文件。 我有一个文本文件,它有这些内容:
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;
}
的getc()
函数返回类型的结果int
的类型不是, char
。 您的char ch;
应int ch;
。
为什么它返回一个int
? 因为它返回的值是它刚读(作为字符unsigned char
转换为int
) 或特殊值EOF
(通常-1)以指示输入错误或结束文件的条件。
不要使用feof()
函数来检测输入的结束。 它返回true,你已经用完了输入之后 。 上次通话至getc()
是返回EOF
,其中,当存储在一个char
对象转换为(char)-1
,其通常是'\377'
。
另一个问题是, feof()
将永远不会返回真值,如果有输入错误; 在这种情况下, ferror()
将返回true。 使用feof()
和/或ferror()
后 getc()
返回EOF
,告诉为什么它返回EOF
。
直到你到达它的结束,从文件中读取:
int ch;
while ((ch = getc(filelist)) != EOF) {
/* ch contains the last character read; do what you like with it */
}
推荐阅读:第12 comp.lang.c常见问题 。
该\377
是一个八进制的转义序列,十进制的255,将所有的位。 它来自转换EOF
-其通常具有值-1
-到char
,由于
while (!feof(filelist)) {
feof(filelist)
只有你试图读到文件后,正在逐步成为现实。
因此,在该文件的末尾,你进入循环一次,和getc()
返回EOF
。