首先,我是 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;
}
这适用于小型文本文件。
但是它不适用于大的(甚至设置缓冲区和具有更大数字的行)。实际上,如果我将 buffer[] 和 *lines[] 增加 1000000 个字节,它不会提供任何东西(如果我理解得很好,它会提供未定义的行为)。我需要使用 100.000 行可变长度行的文件来完成这项工作,
那么,我如何声明一个非常大的数组以便我可以传递每一行?因为,正如我所揭示的,它不适用于大文件。
感谢任何帮助!
最佳答案
char *lines[10000];
只是一个指向行的指针数组,而不是要存储实际行的数组(内存)。
malloc
正在为每一行分配一 block 内存,您应该仅在使用完该 block 后才调用 free
。
如果您删除 free
,您的解决方案将起作用,但您需要记住在其他时间点 free
。
关于C - 将非常大的文件中的行插入到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58831153/