我有我的结构如下,可以有n个vendor
,它可以包含n个test
结构。我试图初始化这个结构。这是我正在尝试的示例代码,稍后我想使用宏来加载结构,如X-macros。
我也使用灵活的结构概念,因为我不知道供应商将有多少测试结构。数据将在一个文件中,struct需要加载那里的所有内容。我为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]’)
我试过没有灵活的结构,到目前为止没有运气。关于如何初始化这个结构的任何建议?
初始值设定项中的.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;
}
此外,由于可变大小,具有灵活数组成员的结构可以是数组的成员。