【发布时间】:2014-07-14 18:08:33
【问题描述】:
基本上,我有这个函数可以计算文本文件中的行数,这让我很头疼。它就像一个小文件的魅力(比如 50000 行)。但是,由于某种原因,当我尝试计算具有 100 万行的文件中的行数时,会出现分段错误错误。这是代码:
int countlines(char *filename)
{
// count the number of lines in the file called filename
FILE *fp = fopen(filename,"r");
int ch=0;
int lines=0;
if (fp == NULL)
return 0;
while ((ch = fgetc(fp)) != EOF)
{
if (ch == '\n')
lines++;
}
fclose(fp);
return lines;
}
老实说,我已经尝试过上千种变体,但我不知道出了什么问题。它达到了 1000000 的行数,但随后它给了我一个分段错误错误。任何帮助将不胜感激!
编辑:既然每个人都说它对他们有用,我将向你展示我的主要功能。
int main(int argc, const char * argv[])
{
int X_len = countlines("/homes/myworkspace/X.txt");
int X[X_len][4];
printf("\n X_len = %d",X_len);
}
【问题讨论】:
-
您正在读取的文件有多大(以字节为单位)?可能是文件内的位置溢出了最大整数值,导致读取位置为负数。
-
@Mr.Llama 我想文件的行数可能超过
2147483647行(不是字符,行),但我更倾向于相信调用者在此函数返回后出现故障。这东西需要调试器时间。 -
另外值得注意的是,这不考虑文件中的最后一行 not 以换行序列结尾。例如:not 以换行序列结尾的单行文件实际上将返回 zero。
-
制作了一个 919MB 的文本文件,包含 101399226 行,对我来说很好。
-
您发布的代码很好。问题出在其他地方。
标签: c line-count