\ c中377个字符

sai*_*can 3 c file-read

我想在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.