24得票2回答
我能否通过为封闭结构分配更多空间来“过度扩展”数组?

坦白地说,这段代码是否有效或者会产生未定义行为?#include <stdio.h> #include <stdlib.h> #include <string.h> struct __attribute__((__packed__)) weird_stru...

86得票7回答
在C语言中使用可变长数组成员是不好的做法吗?

最近我读到使用C语言中的“柔性数组成员”是不良的软件工程实践。然而,这个说法没有任何论据支持。这是一个被广泛接受的事实吗? (柔性数组成员 是C99引入的一个C特性,可以声明最后一个元素为未指定大小的数组。例如:)struct header { size_t len; uns...

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

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

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

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

7得票5回答
如何在堆栈上分配一个带有可变长度数组成员的结构体。

假设我们有一个以柔性数组成员结尾的结构体: struct foo { size_t len; uint8_t data[]; }; 如何在栈上分配此结构体(即在作用域结束时自动释放内存)?另外,如果len可以包含字段data的大小,那就太好了。 目前,我的做法如下: ...

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

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

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

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

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

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

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

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

131得票5回答
零元素的数组有什么必要性?

在Linux内核代码中,我发现了以下我无法理解的东西。 struct bts_action { u16 type; u16 size; u8 data[0]; } __attribute__ ((packed)); 代码在这里:h...