\\在C 377字符(\\377 character in c)

2019-07-05 00:11发布

我想读在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;
    }

Answer 1:

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常见问题 。



Answer 2:

\377是一个八进制的转义序列,十进制的255,将所有的位。 它来自转换EOF -其通常具有值-1 -到char ,由于

while (!feof(filelist)) {

feof(filelist)只有你试图读到文件后,正在逐步成为现实。

因此,在该文件的末尾,你进入循环一次,和getc()返回EOF



文章来源: \\377 character in c
标签: c file-read