问题标签 [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 回答
213 浏览

c - 使用灵活的数组成员和 mmap

我无法访问使用 mmap 初始化的全局结构指针。试图在 throw segfaults 中声明的函数之外的函数中访问结构的成员。

结构:

初始化:

导致段错误的原因:

BIG_SIZE 是一个定义的值,应该足够大以满足我的需要。

无论如何,我为(...)s道歉,但这就是问题出现的地方。我研究了 mmap 文档和可变长度方法,但没有运气。提前致谢!

0 投票
4 回答
2514 浏览

c - C中sizeof的内部机制?

我使用 sizeof 在 C 中获取结构的大小,但我得到的结果是出乎意料的。

我的问题是为什么不buf占用任何空间,为什么int类型的大小在 64 位 CPU 上仍然是 4?

这是来自的输出gcc -v

0 投票
1 回答
1036 浏览

c - 可变长度数组和灵活数组成员有什么区别?

我在ISO C99 委员会草案中看到,结构可以有一个不完整的数组,其末端未指定大小,称为灵活数组成员。

另一方面,C99 也有可变长度数组,它允许在编译时声明大小不恒定的数组。

我认为 FAM 是一种特殊的 VLA,但我看到两个 SO 用户声称不同。此外,阅读Wikipedia 上的部分sizeof,它说这sizeof两者的行为不同。

为什么它们都存在而不是只有一个?(他们的用例是否太不同了?)

此外,还有哪些其他相关行为对于它们每个人来说是不同的?

0 投票
3 回答
790 浏览

c - Adding elements to Flexible Array Members

I've read and looked at some example of flexible array members but I am not exactly sure how to add and read elements of this variable length array.

1) Can someone please show me an example of how I can add an element to this Flexible Length Member and print it after it is stored.

2) I also would like to know how to malloc it correctly. Based on what I have read about Flexible Array Members, we would need to add more space for the flexible array member and can't just use sizeof(School);. My only issue is how do I know how much do add for that flexible member.

0 投票
1 回答
238 浏览

c - 如何释放存储在结构中的 strdup'd char* 灵活数组成员?

我将 char* 灵活的数组成员存储在一个结构中。灵活数组成员中的每个值都经过 strdup 处理。我不确定如何释放每个 strdup 的值,因为我不知道我在 char* 灵活数组成员中存储了多少元素。

这是我的带有灵活数组成员的结构;

0 投票
2 回答
660 浏览

c - 当我制作结构的浅表副本时,灵活的数组成员不会被复制

我以以下方式制作了一个浅拷贝结构:

当我检查灵活数组成员 it 的第一个元素时oneCopy,它为空。但是,如果我检查原始结构中灵活数组成员的第一个元素,它会成功打印出指针。原始结构的所有其他组件都像名称和链表一样被复制。只有灵活的数组成员不会被复制。有谁知道我做错了什么?

0 投票
2 回答
2117 浏览

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

正如标题所述,我想知道具有灵活数组成员的 C 结构数组的行为方式。这是一个例子:

维基百科文章说:

这种结构上的sizeof运算符需要给出灵活数组成员的偏移量。

在我的机器上,这对应于 8 个字节 ( sizeof(size_t))。但是,当我执行以下操作时会发生什么:

显然数组不能保存 vector 的数据v0,因为它只有3*8 字节 = 24 字节宽。我该如何处理这样的情况?

例如,当我正在编写一个库(header: mylib.h, source: my lib.c)并希望对用户隐藏一个特定结构的实现(在 header 中声明的结构,在源中定义 - 隐藏)。可悲的是,这个结构包含一个灵活的数组成员。当用户尝试创建命名结构数组时,这不会导致意外行为吗?

额外:阅读更多关于OpenSTD C 规范中的灵活数组。
只需搜索“灵活数组成员”。

编辑:C11 标准的最新草案,C 语言的最新免费参考可在此处获得:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570。 pdf

0 投票
1 回答
953 浏览

c - C 编程 - 灵活数组成员的非静态初始化

我认为我的英语很难理解其他关于此的文章。但不管怎么说:

我只是想我可以编写一个程序(用 C 语言),它可以存储一组卡片。并不复杂,只需存储卡片的值和名称并打印出来。我是 C 的初学者,因为我在我的书中的“结构中的字符串”部分,我想自己尝试结构。到目前为止,这是我的代码:

}

我只是想测试它是否有效,所以我只是在代码中编写了心卡。如果我想编译这个文件,我的编译器 (gcc/mingw) 会遇到 26 个错误。它说:“(心脏[0]的近初始化)”“灵活数组成员的非静态初始化”我不太明白这一点。在书中,一切都按预期进行。我试图重建书中的代码并更改名称,但它不起作用。我认为这是字符串的问题,因为如果我只使用整数,一切正常。在另一篇文章中已经读过,每个字符串都应该手动分配,并且有一个代码示例,但我不知道所有行应该是什么意思,我想了解我的代码是做什么的,所以我不复制+ 粘贴。

你能解释一下为什么这不起作用吗?PS:我目前是在windows下写的,所以请不要用bash命令解释之类的。我也是德国人,我的英语不是“鸡蛋的黄色”,请尝试在不使用复杂的“句子结构”(我希望你知道我的意思:D)和不寻常的词的情况下进行解释。

感谢大家的帮助!

0 投票
1 回答
879 浏览

c++ - 是否可以有一个带有灵活数组成员的结构的 std::vector ?

我有一个需要使用的带有灵活数组成员的结构。

我可以通过执行以下操作来初始化它并使用它:(它也适用于 malloc 或任何其他动态分配)

这工作得很好。但是现在我需要一个对批量记录进行操作的接口,并且我一直在尝试为此使用 std::vector。然后问题开始出现,我猜这是因为 std::vector 将所有元素连续排列在内存上,并且由于 sizeof(Record) 不会考虑内容的大小(每个向量元素将只包含 4 个字节,而不是 4 字节 + size_of_contents * sizeof(Data)),向量元素实际上是共享内存,然后每个元素开始覆盖前一个元素的内容。那有意义吗?

如果这确实是问题所在,我想知道是否有任何方法可以“强制”向量为每个元素分配特定的大小(而不是 sizeof 返回元素类型的任何大小)。这样我可以确保每个向量元素都有足够的大小。如果这不可能,是否有替代解决方案?也许一个不同的容器可以让我这样做?请记住,我确实需要使用定义的结构(我很想将整个东西替换为向量,但不幸的是这是不可能的)

0 投票
2 回答
65 浏览

c - 改变结构的大小?

我创建了一个名为 Register 的结构,其中包含大约 8 个字段。我现在想创建一个名为 Instrument 的结构,它应该具有可变数量的字段,每个工具都有 6 个字段,加上一定数量的字段,具体取决于分配给它的寄存器的数量。我怎样才能创建这个?

为了清楚起见,这是我想要创建的(尽管可能不准确)。