初始化结构数组时出错

问题描述 投票:1回答:1

我有我的结构如下,可以有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]’)

我试过没有灵活的结构,到目前为止没有运气。关于如何初始化这个结构的任何建议?

c arrays struct preprocessor
1个回答
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;
}

此外,由于可变大小,具有灵活数组成员的结构可以是数组的成员。

© www.soinside.com 2019 - 2024. All rights reserved.