我想在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;
}
Run Code Online (Sandbox Code Playgroud)
Kei*_*son 11
该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()EOFEOF
要从文件中读取,直到它到达结尾:
int ch;
while ((ch = getc(filelist)) != EOF) {
/* ch contains the last character read; do what you like with it */
}
Run Code Online (Sandbox Code Playgroud)
建议阅读:comp.lang.c FAQ的第12节.
Dan*_*her 10
这\377是一个八进制转义序列,十进制255,所有位都设置.它来自转换EOF- 通常具有价值-1- 到a char,由于
while (!feof(filelist)) {
Run Code Online (Sandbox Code Playgroud)
feof(filelist)只有在您尝试读取文件后才会变为真实.
所以在文件的末尾,再次输入循环和getc()返回EOF.
| 归档时间: |
|
| 查看次数: |
17379 次 |
| 最近记录: |