我正在尝试读取 c 中的文件。
我有一个 .txt 文件,它的内容如下:
文件一.txt 文件二.txt 文件三.txt 文件四.txt
当我尝试使用 fopen 读取此文件时,我得到以下输出:
文件一.txt 文件二.txt 文件三.txt 文件四.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;
}
The getc()
函数返回类型的结果int
,不是类型char
. Your char ch;
应该int ch;
.
为什么它返回一个int
?因为它返回的值是either它刚刚读取的字符(作为unsigned char
转换成int
) or特殊价值EOF
(通常为 -1)指示输入错误或文件结束条件。
不要使用feof()
函数来检测输入的结束。只返回trueafter你已经没有输入了。您最后一次致电getc()
正在返回EOF
,当存储到char
对象被转换为(char)-1
,这通常是'\377'
.
另一个问题是feof()
will never如果输入错误,则返回真值;在这种情况下,ferror()
将返回 true。使用feof()
and/or ferror()
after getc()
回报EOF
, 告诉why它回来了EOF
.
要从文件中读取直到到达结尾:
int ch;
while ((ch = getc(filelist)) != EOF) {
/* ch contains the last character read; do what you like with it */
}
建议阅读:第 12 节comp.lang.c 常见问题解答.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)