我需要在内存中静态创建一个由字符串向量表组成的数据结构,有效地:
typedef struct {
char *argv[];
} Entry;
const Entry Table[] = {
{"a"},
{"a", "b", "c"}
};
但是尝试编译这个结果是error: initialization of flexible array member in a nested context
显然,根据GCC Manual: 6.18 Arrays of Length Zero,这在GCC中是可能的。在C 2018 www.example.com 18之后,这可能是可能6.7.2.1的,尽管我在其他地方读到过
不能存在包含灵活数组成员的结构数组。
是否有一个标准的方法来实现这种行为?如果没有,是否有一个 * 首选 * 的方法?
2条答案
按热度按时间b09cbbtk1#
您无法使用灵活的数组成员执行此操作。
相反,您可以使用
char **argv
,并使用复合文本对其进行初始化。我向每个数组添加了
NULL
,这样应用程序就可以知道它们的长度(真实的的argv
也有这个)。hkmswyz62#
你没有存储argv的元素计数,你怎么知道第一个有1个元素,第二个有3个元素?你必须存储它,例如,在另一个数组成员中。
您可以定义一个结构,它具有与您想要的具有灵活数组成员的结构数组完全相同的静态内存布局。然后,您可以使用指向
Entry
的指针为该结构指定别名,并将其用作条目数组。以下示例完成了此操作:代码输出:
最值得注意的inotify() Linux系统调用返回一个由灵活数组成员组成的数组。
在C语言中有没有静态初始化灵活数组成员的标准方法?
没有。
如果没有,是否有更好的办法?
不要使用灵活的数组成员,使用指针,如另一个答案所示。