c - 解决结构数组及其中的 realloc 的一些建议

标签 c arrays struct

我有一个结构

struct object{
    double x, y, size;
    int ident;
}

和函数

int object_read_from_file(struct object* s, FILE* f);

从 .txt 文件的一行读取一些数据并将其保存在结构对象中。 P.e.:“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在这里允许之后realloc,并且realloc必须在之前完成保存新条目。当然因为s不是指针->必须替换为

如果在fopen之后最好检查一下f是否不是NULL

考虑到object的定义,您可以使用memcpy来设置s中的新条目

关于c - 解决结构数组及其中的 realloc 的一些建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56225791/

相关文章:

javascript - 如何在javascript中对日期数组进行排序

c++ - C++ C样式数组的大小限制

struct - IDL : Accessing struct fields using field names stored in variables?

c - 哪种使用 C 数组的数据组织可以生成最快的代码,为什么?

c - 为什么 GCC 警告不要进行这种隐式转换?

objective-c - iOS 应用程序中的 FFMpeg 不同步音频/视频

c - 如何从tun接口(interface)接收数据到dpdk绑定(bind)的网卡?

c++ - gdb中链接命令观察执行栈

javascript - 如何根据自定义逻辑扩展一个数组以适应另一个数组的相同长度?

c++ - C++中指针结构的运算符重载