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

时间:2014-07-14 18:08:34

标签: c line-count

基本上,我有这个函数来计算文本文件中的行数,这让我很头疼。它就像一个小文件的魅力(比如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);
}

2 个答案:

答案 0 :(得分:2)

这是问题

int X[X_len][4];

如果X_len大于1000000,则(堆栈)数组没有足够的内存。

尝试动态分配(堆)而不是

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

答案 1 :(得分:0)

我想问题就在这里:

 int X[X_len][4];

这会在堆栈上分配内存,这可能只有4MB,这可以解释在1 000 000行之后失败。

我建议在堆上分配它:

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