【发布时间】:2020-07-04 11:18:43
【问题描述】:
在众多资源中,您可以找到一个简单的 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;
}
但是,它无法计算 num。 Top2Billion-probable-v2.txt 中的行数。它停在这条线上
<F0><EE><E7><E0><EB><E8><FF>
和输出
1367044 Top2Billion-probable-v2.txt
何时应该输出1973218846 行。 wc -l 以某种方式避免了这个问题(而且速度惊人地快)。
我应该放弃计算文件行数的正确 C 实现,还是应该像 wc 那样间隔特殊字符?
【问题讨论】:
-
chr必须是 int,而不是 char。见c-faq.com/stdio/getcharc.html -
fgetc不返回char,而是返回int。你如何区分0xFF和<EOF>和char? -
还可以尝试使用
"rb"而不是仅使用"r"打开文件。wc可能更快,因为它读取更大的数据块而不是单个字符,并使用优化的函数(例如strchr)搜索这些数据。 -
你是对的。我应该使用解决问题的
int。 -
阅读
rb并没有带来任何加速,顺便说一句。