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

标签 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);
}

最佳答案

这就是问题所在

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/

相关文章:

java - 如何检查提交时 LOC 是否增加?

linux - 为 unix 中的文件中的每一行添加不同的计数

每个作者的 GIT 贡献(行)

iphone - FFmpeg:与audioqueue的音频同步

c - 如何让我的 makefile 自动链接库?

php - 如何衡量项目中的代码行数?

c# - 获取文本文件中行数的估计值

c - 如何从Assembly中调用C函数,以及如何将其静态链接?

c函数调用错误

C-字符插入和弹出操作