gpt4 book ai didi

c - 如何增加指向具有可变长度数组的结构的指针?

转载 作者:行者123 更新时间:2023-11-30 14:36:42 24 4
gpt4 key购买 nike

我在访问具有可变大小数组的结构(传递给函数的数组)的指针时遇到问题。

        char name[20];
char value[20];
}param_t;
typedef struct object {
char name[20];
int no_of_params;
param_t params[];
};

int main()
{
int no_of_objs = 3, no_of_params = 5;
object_t *objs = malloc(no_of_objs * (sizeof(object_t) + (no_of_params * sizeof(param_t)) );
//...
//...

objs++; //Increment to point to the next item <-- Problem: ignores params[] size

// blah
// blah
// blah

我分配了内存以容纳 3 个 object_t,每个 object_t 存储 5 个 param_t。

内存分配很好,我可以为成员设置值。objs[0] 完全没问题。现在,如果我增加 objs (objs++) 以指向下一个对象,它实际上指向前一个对象的参数地址。它完全忽略了 params[]。现在,如果我为第二个 *obj 设置值,它实际上会覆盖前一个 *obj 的 params[]。

我的问题是:这是 C 编译器中的错误吗?如果没有,我如何遍历对象?

最佳答案

这不是 C 编译器中的错误,只是使用可变长度数组的一个缺点。

编译器可以将struct的可变长度数组成员视为不影响sizeof

这实际上破坏了指针算术,这意味着您不能轻松地“遍历对象”,正如您所说的那样。

我担心这就是生活。这是从 C11 中删除可变长度数组作为强制要求的充分理由。

关于c - 如何增加指向具有可变长度数组的结构的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com