\ c中377个字符

时间:2012-12-11 23:36:33

标签: 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;
    }

2 个答案:

答案 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节。