c 计算文件中的行数避免 EOF

c count lines in a file avoid EOF

在众多资源中,您可以找到一个简单的 C 程序来计算文件中的行数。我正在使用其中之一。

#include <stdio.h>


int main(int argc, char* argv[]) {   
    FILE *file;
    long count_lines = 0;
    char chr;
 
    file = fopen(argv[1], "r");
    while ((chr = fgetc(file)) != EOF)
    {
        count_lines += chr == '\n';
    }
    fclose(file); //close file.
    printf("%ld %s\n", count_lines, argv[1]);
    return 0;
}

但是,它无法统计数量。 Top2Billion-probable-v2.txt 中的行数。它停在线上

<F0><EE><E7><E0><EB><E8><FF>

并输出

1367044 Top2Billion-probable-v2.txt

什么时候应该输出 1973218846 行。 wc -l 以某种方式避免了这个问题(而且速度快得惊人)。

我应该放弃计算文件行数的正确 C 实现,还是应该像 wc 那样 space 特殊字符?

fgetc() returns 读取为无符号字符的字符 转换为 int 或 EOF。因此,将 chr 声明为 int 而不是 char 应该可以解决问题。