我有以下结构
typedef struct _person {
int age;
char sex;
char name[];
}person;
我在互联网上进行了一些基本搜索(但没有成功),关于如何创建一个含有可变数组成员的结构体实例并初始化它,而不使用malloc()
。
例如:对于普通的结构体,像:
struct a {
int age;
int sex;
};
我们可以创建一个struct a
的实例,并像这样进行初始化:
struct a p1 = {10, 'm'};
对于包含灵活数组的结构体(如上面提到的_person
),我们如何像普通 structures
一样创建实例和初始化呢?
这是否可能?如果是,我们如何在初始化期间传递数组大小以及要初始化的实际值?
还是说,根据 C99 规范中所述的 - 6.7.2.1 结构体和联合类型说明符 - 第17点
,唯一创建具有灵活数组的结构体的方法是使用 malloc()
?!
struct { size_t len; int data[]; } x = { 4, { 1, 2, 3, 4 } };
,它可以工作,但不是可移植的。你可以研究一下你平台上的alloca
版本,可能会有更加可移植的解决方案,但你需要确保它们都以相同方式运作并具有相同的实现特性。 - Chris Lutz