基本上,我有这个函数可以计算文本文件中的行数,这让我很头疼。对于小文件(比如 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);
}
最佳答案
这就是问题所在
int X[X_len][4];
当 X_len 大于 1000000 时,(stack) 数组没有足够的内存。
试试动态分配(堆)
int (*X)[4];
X = malloc(X_len * sizeof *X);
if (X == NULL) /* error */;
// ...
free(X);
关于c - C中简单文本文件行计数器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742988/