问题标签 [flexible-array-member]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5951 浏览

c - 结构中未调整大小的数组声明

为什么C允许这样做:

数组arr没有指定大小?

0 投票
1 回答
4450 浏览

c - 错误:灵活数组成员的使用无效

我不知道为什么这段代码会出现这个错误。我应该怎么办?错误如下:

灵活数组成员的使用无效

在这条线上:

如果是更大的代码部分:

0 投票
6 回答
3699 浏览

c++ - C++ 中的 Struct hack 等价物

0 投票
3 回答
1275 浏览

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

在阅读了一些与灵活数组成员相关的帖子后,我仍然不完全理解为什么我们需要这样的功能。

可能重复:
C 中的灵活数组成员 - 不好?
这也是 C 中的灵活数组结构成员吗?

(如果我没有从上面可能的重复问题中解决我的问题,请怪我)

以下两种实现之间的真正区别是什么:

我知道 h2 的大小就好像灵活数组成员(数据)被省略了,即sizeof(h2) == sizeof(size_t). 而且我也知道灵活的数组成员只能作为结构体的最后一个元素出现,所以原来的实现可以在data.

我真正的问题是为什么 C99 添加这个功能?仅仅因为 sizeof(h2) 不包含数据的实际大小?我确信我必须错过这个功能的一些更重要的点。请为我指出。

0 投票
1 回答
108 浏览

c - char指针与char数组不同?

阅读Redis 的源代码

我发现char buf[]不能用 替换char *buf,因为这char* buf会增加结构的大小。

但我不明白为什么,有人会对此有所了解吗?


编辑:我已经在我的 x86_64 Ubuntu(3.2.0-23-generic) 上使用 gcc 4.6.3 测试了它,如下所示:

printf("sdshdr len = %zu\n", sizeof(struct sdshdr));

char buf[]它输出sdshdr len = 8sdshdr len = 16char *buf.

0 投票
5 回答
319 浏览

c - 如何按值将数组发送到c中的函数?

我尝试了类似的东西:

但是这个示例代码无法编译。如何按值(不是引用抛出指针)发送数组到函数?

0 投票
2 回答
1016 浏览

c - 为结构中的灵活数组分配内存

我正在尝试使用 flexarray 为结构分配内存。我以这种方式收到它,我必须像这样实现它。

结构如下:

我有一个启动结构的函数。我有问题的地方就在那里。我真的不知道:我是否必须使用 malloc 为结构分配内存,仅此而已,还是我需要分配内存来*data[]像指向数组的指针一样?

那么我是否必须编写以下代码?

我希望我的解释足够清楚。如果没有,我可以尝试再次解释。

谢谢!:)

0 投票
2 回答
124 浏览

c++ - 在 C++ 中的 struct 定义中使用 struct 本身

我想在 C++ 中实现一个简单的树结构,例如:

但是编译器报错(CLang++和G++都有)

像这样的东西

顺便说一句,我将 -std=c++11 标志用于某些 C++ 11 功能

任何帮助都会得到帮助

0 投票
3 回答
126 浏览

c - 动态查找结构的大小

有没有办法在 C 中动态查找结构大小?

Sizeof 是编译时运算符..那么另一个选项是什么。

如果我们可以在结构中动态分配数组(灵活数组),那么动态查找结构大小也应该在那里..请帮帮我...

0 投票
2 回答
2059 浏览

c - C99:联合内的灵活数组?

我试图将某些东西从使用 struct hack 转换为使用灵活的数组成员,结果却遇到以下错误消息:

错误:使用灵活数组成员的结构无效

(GCC 4.8.1, gnu99, MinGW)

在尝试追查消息的原因后,我将其提炼为以下相对最小的情况:

换句话说,即使联合是结构的最后一个成员,具有灵活数组成员的结构也不能放入结构中的联合内。

(请注意,将灵活的数组成员直接放在联合似乎确实有效。)

现在:除了恢复到 struct hack(将 c 声明为长度为 1 的数组)之外,还有什么好的方法可以解决这个问题?指向联合内部结构的指针可以工作,但会受到额外的间接层。