c - 解决结构数组及其中的 realloc 的一些建议
问题描述
我有一个结构
struct object{
double x, y, size;
int ident;
}
和功能
int object_read_from_file(struct object* s, FILE* f);
它从 .txt 文件的一行中读取一些数据并将其保存在 struct 对象中。Pe:“0.1894 0.3442 0.9 26”可能是 .txt 文件的一行。这都在文件“object.c”中。
在文件“main.c”中,我现在必须实现,从一个大 .txt 文件中读取所有对象,其中包含许多(在程序启动之前不知道)名称为“arg [3]”的行,并将它们保存在一个数组中“对象”按照它们被读入的顺序。我的第一次尝试是这样的:
FILE* f = fopen(arg[3], "r");
struct object s;
int x = 0;
s* objects;
objects = calloc(1, sizeof(struct object));
while(object_read_from_file(&s, f) !=0)
{
objects[x].x = s->x;
objects[x].y = s->y;
objects[x].size = s->size;
objects[x].ident = s->ident;
objects = realloc(objects, ((x+1) * (sizeof(struct object))));
x++;
}
fclose(f);
我知道这里没有保存到我的数组“对象”中。那是因为我现在在编译时已经有多个错误,比如“->”是一个无效的类型参数并且“对象”是未声明的。我完全不知道我做错了什么,我很想得到一些帮助,或者或者更好地了解以另一种方式解决任务的方法,而不是我的方式。
解决方案
代码必须是:
FILE* f = fopen(arg[3], "r");
struct object s;
int x = 0;
struct object * objects = malloc(0);
while(object_read_from_file(&s, f) !=0)
{
objects = realloc(objects, ((x+1) * (sizeof(struct object))));
objects[x].x = s.x;
objects[x].y = s.y;
objects[x].size = s.size;
objects[x].ident = s.ident;
x++;
}
fclose(f);
第一个malloc在这里允许之后重新分配,并且必须在重新分配之前完成以保存新条目。当然因为s不是指针->
必须替换为.
如果最好在fopen之后检查f是否为NULL
考虑到对象的定义,您可以使用memcpy从s设置新条目
推荐阅读
- snowflake-cloud-data-platform - load_history 视图是否显示使用 copy into 命令加载的空文件的记录?
- python - pyodbc.ProgrammingError: ('SQL 包含 2 个参数标记,但提供了 34 个参数', 'HY000')
- unit-testing - 将逻辑放在对象的密钥对值中是一种好习惯吗?(声纳问题)
- python-3.x - 如何在 Python 3.8 中过滤两个 dict 列表
- python - Python - 将数据拟合到双指数函数
- magento2 - Magento 2:从自定义来源获取库存数量
- go - 如何正确从 GO 中的 url 获取内容?
- python - 最大化复杂多变量函数的计算有效方法
- android - 为 react-native 设置环境并将正在开发的应用程序运行到手机中时出错
- javascript - 邮递员错误无法读取 null 的属性角色