c - 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 行的可变长度行文件来完成这项工作,
那么,我怎样才能声明一个非常大的数组,这样我就可以通过每一行呢?因为,正如我所暴露的,它不适用于大文件。
任何帮助表示赞赏!
解决方案
char *lines[10000];
只是一个指向行的指针数组,而不是要存储实际行的数组(内存)。
malloc
正在为每一行分配一块内存,你应该free
只在使用完这个块时调用。
如果您删除了free
您的解决方案,您的解决方案将起作用,但您需要free
在其他时候记住。
推荐阅读
- python - Range() 函数将字典中的整数(值)更改为对象
- c# - .NET Core 的自定义 Specflow html 报告的想法
- python - 尝试在服务器上运行 django 应用程序时密码身份验证失败
- sql-server - 在 SQL-Server 中重写 Oracle 函数
- google-cloud-platform - GKE 上的 Nginx 控制器与 TCP 负载平衡超时
- ignite - Apache Ignite 找不到已部署的服务
- javascript - 提升仅在 JavaScript 中实现吗?
- c - 向前定义 GCC 的编译指示
- javascript - 将分组查询转换为对象树
- javascript - 语法错误“未定义(”。错误的根源在哪里?