首页 > 解决方案 > C - 将非常大文件中的行插入数组

问题描述

首先,我对 C 很陌生,我知道这是一个非常重复的问题,但是,我找不到任何可以帮助我解决问题的东西。

这是我的代码:它需要一个文本文件并将每一行存储在一个数组中。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *file;
    file = fopen("test.txt", "r");
    char buffer[600];
    char *lines[10000];
    int i = 0;

    while(fgets(buffer, sizeof(buffer), file))
    {

        lines[i] = malloc(sizeof(buffer));
        strcpy(lines[i], buffer);
        i++;
        free(lines[i]);
    }

    fclose(file);


    return 1;
}

这适用于小文本文件。

但是它不适用于大的(甚至设置缓冲区和具有更大数字的行)。实际上,如果我像 1000000 字节一样增加 buffer[] 和 *lines[] ,它不会给出任何东西(如果我理解得很好,它会给出未定义的行为)。我需要使用一个 100.000 行的可变长度行文件来完成这项工作,

那么,我怎样才能声明一个非常大的数组,这样我就可以通过每一行呢?因为,正如我所暴露的,它不适用于大文件。

任何帮助表示赞赏!

标签: carraysfilepointersmalloc

解决方案


char *lines[10000];只是一个指向行的指针数组,而不是要存储实际行的数组(内存)。

malloc正在为每一行分配一块内存,你应该free只在使用完这个块时调用。

如果您删除了free您的解决方案,您的解决方案将起作用,但您需要free在其他时候记住。


推荐阅读