25得票1回答
为什么灵活数组成员的静态初始化会起作用?

我已经编写了以下用于菜单的基本代码:typedef struct Menu { char* title; unsigned num_submenus; struct Menu *submenu[]; } Menu; Menu sub1 = {"Submenu 1", ...

34得票3回答
灵活数组成员可能导致未定义的行为?

在结构体类型中使用可变数组成员(Flexible Array Members,FAMs),是否会使我们的程序面临未定义的行为? 一个程序是否可以使用FAMs并仍然是一个严格符合规范的程序? 可变数组成员的偏移量是否必须在结构体的末尾? 这些问题适用于C99(TC3)和C11(TC1)。#...

7得票3回答
联合体支持柔性数组成员吗?

我已在联合体中声明了一个灵活的数组成员,就像这样: #include <stdio.h> union ut { int i; int a[]; // flexible array member }; int main(void) { union u...

24得票6回答
C++中的“结构体hack”等效方法

众所周知,在C90和C99中,有一种叫做结构体hack的技巧,可以在结构体的最后一个成员处使用长度为0的数组。随着C99引入灵活数组成员的方式,我们甚至可以使用[]以标准的方式来使用它。不幸的是,C++并没有提供这样的构造方法,并且(至少在Clang 3.4中),使用[0]或[]编译结构体将会...

8得票3回答
灵活数组成员的真正好处是什么?

阅读了一些与可变数组成员相关的帖子后,我仍然不完全明白为什么我们需要这样的功能。 可能是重复问题: C语言中的可变数组成员是否有问题? 这也是C语言中的可变数组结构成员吗? (如果我没有从上面的可能重复问题中解决我的问题,请责备我) 以下两个实现之间的真正区别是什么: struct...

62得票10回答
在C++中,可变长数组成员是否有效?

在C99中,您可以这样声明一个结构体的柔性数组成员:struct blah { int foo[]; }; 然而,当我们在工作中有人尝试使用clang编译C++代码时,那个语法就不能用了。(使用MSVC时可以)我们不得不将其转换为:struct blah { int foo[0...

11得票4回答
C-结构体中的灵活数组成员

引用C标准第6.7.2.1节的内容: struct s { int n; double d[]; }; 这是一个有效的结构声明。我正在寻找这种语法的一些实际用途。准确地说,这种构造相较于将double*作为第二个元素并没有更加强大,还是另一种“多种方法可行”的情况吗? Arpan

16得票2回答
灵活数组成员真的必要吗?

一个具有弹性数组成员的结构体,显然不是用来声明的,而是与指向该结构体的指针一起使用。在声明具有弹性数组成员时,必须至少有另一个成员,并且弹性数组成员必须是该结构体中的最后一个成员。 假设我有一个这样的结构体:struct example{ int n; int flm[]; ...

36得票3回答
如何初始化具有可变数组成员的结构体

我有以下结构typedef struct _person { int age; char sex; char name[]; }person; 我在互联网上进行了一些基本搜索(但没有成功),关于如何创建一个含有可变数组成员的结构体实例并初始化它,而不使用malloc()...

8得票2回答
C99:联合体内部支持灵活数组?

我曾试图将一些内容从使用struct hack转换为使用flexible array member,但却遇到了以下错误信息: error: invalid use of structure with flexible array member (GCC 4.8.1,gnu99,MinGW)...