我的结构如下所示,可以有n个vendor
,其中可以包含n个test
结构。
我正在尝试初始化此结构。这是我正在尝试的示例代码,稍后我想使用宏进行设置并加载X-macros之类的结构。
我还使用了灵活的结构概念,因为我不知道供应商将要使用多少测试结构。数据将在一个文件中,该结构需要加载其中的所有内容。我为SO创建了一个最小的示例代码。 下面是我的代码。
#include <stdio.h>
typedef struct test{
int a;
int b;
int c;
}test;
typedef struct vendor{
int size;
test t[0];
}vendor;
vendor v[]={
{.size = 1, .t[] = {{1,2,3},}}
};
int main()
{
return 0;
}
我收到此错误-
a.c:16: error: expected expression before ‘]’ token
a.c:16: error: array index in initializer not of integer type
a.c:16: error: (near initialization for ‘v[0].t’)
a.c:16: error: extra brace group at end of initializer
a.c:16: error: (near initialization for ‘v[0]’)
a.c:16: error: extra brace group at end of initializer
a.c:16: error: (near initialization for ‘v[0]’)
a.c:16: warning: excess elements in struct initializer
a.c:16: warning: (near initialization for ‘v[0]’)
我尝试了没有灵活的结构,到目前为止没有运气。 关于如何初始化此结构的任何建议?
答案 0 :(得分:3)
初始化器中的.t[]=
语法无效。使用指定的初始值设定项时,只需指定成员的名称:
.t={1, 2, 3}
但是,这仍然不适用于灵活的数组成员。
具有灵活数组成员的结构的大小不包括该灵活数组成员的空间,因此您不能为其创建静态或自动实例。您需要为该结构动态分配内存:
vendor *v;
void init()
{
v = malloc(sizeof(vendor) + 1 * sizeof(test));
v.size = 1;
v.t = (test){1, 2, 3};
}
int main()
{
init();
return 0;
}
此外,由于大小可变,具有灵活的数组成员cannon的结构也将成为数组的成员。