一个简单的C文本文件行计数器的问题



基本上,我有这个函数来计算文本文件中的行数,这让我很头疼。对于小文件(比如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的行数,但它给了我一个分割错误。任何帮助将非常感激!

编辑:既然每个人都说它对他们有效,我将向你展示我在main函数中有什么。

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时,(堆栈)数组没有足够的内存。

尝试动态分配(heap)代替

int (*X)[4];
X = malloc(X_len * sizeof *X);
if (X == NULL) /* error */;
// ...
free(X);

我想说问题在这里:

 int X[X_len][4];

这将在堆栈上分配内存,可能只有4MB,这将解释在1 000 000行后失败的原因。

我建议把它分配到堆上:

int *X = (int*)malloc(X_len * sizeof(int) * 4);

相关内容

  • 没有找到相关文章

最新更新