flexible-array-member相关内容

真的需要灵活的数组成员吗?

一个具有灵活数组成员的结构显然不是为了声明,而是与指向该结构的指针结合使用.声明灵活数组成员时,必须至少有一个其他成员,并且灵活数组成员必须是该结构中的最后一个成员. 假设我有一个看起来像这样的: 结构示例{国际n;int flm[];} 然后要使用它,我必须声明一个指针并使用 malloc 为结构的内容保留内存. struct example *ptr = malloc(sizeof ..
发布时间:2021-12-23 17:33:33 其他开发

灵活数组成员的真正好处是什么?

在阅读了一些关于flexible array member的帖子后,我仍然没有完全理解为什么我们需要这样的功能. 可能的重复: C 中的灵活数组成员 - 不好? 这是 C 中的灵活数组结构成员吗好吗? (如果我没有从上面可能重复的问题中解决我的问题,请怪我) 以下两种实现之间的真正区别是什么: struct h1 {size_t len;无符号字符*数据;};结构 h2 { ..
发布时间:2021-12-23 17:20:37 其他开发

如何使用灵活的数组成员初始化结构

我有以下结构 typedef struct _person {年龄;字符性;字符名称[];}人; 关于如何在不使用 malloc() 的情况下使用灵活的数组成员创建实例和初始化结构,我已经做了一些基本的互联网搜索(但没有成功). 例如:对于像 这样的普通结构 struct a {年龄;性别;}; 我们可以创建一个struct a的实例并像这样初始化它 struct a p1 = ..
发布时间:2021-12-23 17:02:01 其他开发

零元素数组需要什么?

在Linux内核代码中,我发现了以下我无法理解的东西. struct bts_action {u16型;u16 尺寸;u8 数据[0];} __attribute__ ((打包)); 代码在这里:http://lxr.free-electrons.com/source/包括/linux/ti_wilink_st.h 零元素数据数组的需求和目的是什么? 解决方案 这是一种拥有可变 ..
发布时间:2021-12-02 08:19:02 其他开发

具有灵活数组成员的结构数组的行为如何?

正如标题所述,我想知道如何使用 灵活数组成员行为.下面是一个例子: 结构向量{size_t 长度;双数组[];}; 维基百科文章说: 这种结构上的 sizeof 运算符需要给出灵活数组成员的偏移量. 在我的机器上,这对应于 8 个字节 (sizeof(size_t)).但是,当我执行以下操作时会发生什么: 显然数组不能保存向量v0的数据,因为它只有3*8 bytes = 24 ..
发布时间:2021-11-18 04:37:08 其他开发

结构中未定义大小的数组声明

为什么 C 允许这样做: typedef 结构体{int arr[];} s; 其中数组 arr 没有指定大小? 解决方案 这是 C99 的特性,叫做 flexible arrays,主要特性是允许 使用可变长度数组,如结构内的特征和R..在这个关于灵活数组成员的另一个问题的答案 提供了使用灵活数组而不是的好处列表>指针.草案 C99 标准在 6.7.2.1 结构和联合说明符 段落 ..
发布时间:2021-11-18 01:28:58 其他开发

在 C 中使用灵活的数组成员是不好的做法吗?

我最近读到在 C 中使用灵活的数组成员是一种糟糕的软件工程实践.然而,该声明没有任何论据支持.这是公认的事实吗? (灵活数组成员是 C99 中引入的一项 C 特性,可以通过它声明最后一个元素是一个未指定大小的数组.例如:) 结构头{size_t len;无符号字符数据[];}; 解决方案 使用 goto 是一种糟糕的软件工程实践,这是一个公认的“事实".这并不能说明问题.有时 goto ..
发布时间:2021-11-18 01:10:24 其他开发

零长度数组

我正在重构一些旧代码,发现很少有包含零长度数组的结构(如下).警告当然会被 pragma 压抑,但我未能通过包含此类结构的“新"结构创建(错误 2233).数组“byData"用作指针,但为什么不改用指针?或长度为 1 的数组?当然,没有添加任何评论来让我享受这个过程......使用这种东西的任何原因?在重构这些方面有什么建议吗? struct someData{int nData;BYTE b ..
发布时间:2021-11-18 01:08:35 C/C++开发

嵌套结构中的灵活数组成员

在嵌套结构中具有灵活的数组成员是有效的 C 代码吗?那么我下面的示例代码是否能保证在正常编译器下按预期工作? #include #include 结构体{字符 c;int ns[];};结构体{结构 d d;};结构体{结构 c c;};结构体{国际n;结构 b b;};int main() {const int n = 10;struct a *pa = malloc(sizeof(*pa) ..
发布时间:2021-08-31 19:06:41 其他开发

单个malloc中的多个结构调用未定义的行为?

来自在声明灵活数组成员时使用正确的语法,它表示当 malloc 用于标头和灵活数据时, data [1]] 被入侵到 struct , 当访问其他任何元素时,此示例具有未定义的行为比数据数组的第一个元素.(请参阅C标准,6.5.6.)因此,编译器可以生成不返回代码的代码.访问数据的第二个元素时的期望值. 我查看了C Standard 6.5.6,但看不到它将如何产生不确定的行为.我使用 ..
发布时间:2021-05-28 20:17:34 其他开发

Python Ctypes 0大小的数组?

我已经在很多地方找到了这个,并尝试使用cast,但是没有成功。 我在c中有一个结构,例如: struct t { int x; 结构y [0]; }; 我如何调整结构y的大小?我在SO上尝试了此问题的其他类型( python ctypes是否支持size-0数组?),但不断出现此错误。 TypeError:类型不兼容,y_Array_20实例而不是y_Arr ..
发布时间:2020-09-24 21:46:49 Python

具有灵活数组成员的结构的数组如何表现?

正如标题所述,我想知道带有灵活数组成员的C结构数组表现良好.这是一个示例: struct vector { size_t length; double array[]; }; 维基百科文章说: 需要这样的结构上的sizeof运算符才能给出灵活数组成员的偏移量. 在我的机器上,这对应于8个字节(sizeof(size_t)).但是当我执行以下操作时会发生什么: ..
发布时间:2020-07-18 00:32:30 其他开发

C ++中的Struct hack等效项

众所周知,您有一个长度为0的数组作为C90和C99中结构的最后一个成员的结构技巧,并且随着C99中灵活数组成员的引入,我们甚至有了使用它的标准化方法[].不幸的是,C ++没有提供这样的构造,并且(至少使用Clang 3.4 ),使用[0]或[]编译结构会产生--std=c++11 -pedantic编译警告: $ cat test.cpp struct hack { char fil ..
发布时间:2020-07-17 21:56:17 C/C++开发

将灵活数组成员分配为结构

我对指针和东西了解得更多,但是我不知道我在这里做错了什么. 如果我有 字符*(*数据)[] 那将被解释为“指向char指针数组的指针",对吗? 然后我有一个像这样的结构,类型定义为myStruct,可能是多余的,但这是重点: typedef struct myStruct myStruct; struct myStruct{ int size; cha ..
发布时间:2020-05-28 23:32:28 其他开发