|
1
3
不能有多个可变大小的数组。编译器在编译时应该如何知道friend[]的位置?friend的位置取决于数据的大小[],编译时数据的大小未知。 |
|
|
2
3
这是一个非常危险的结构,我建议不要这样做。当结构是最后一个元素时,只能在结构中包含一个可变长度数组,当您这样做时,必须确保分配足够的内存,例如:
您要做的只是使用常规的动态分配数组:
|
|
|
3
1
你不能-至少不能用你正在尝试的简单方法。结构末尾的非大小化数组基本上是到结构末尾的偏移量,没有内置方式来查找结尾。 所有字段在编译时都转换为数值偏移量,因此需要在那时进行计算。 |
|
|
4
1
到目前为止,答案是严重地过度复杂化了一个简单的问题。麦基说得对,为什么它不能像你想做的那样做,但是你可以做得非常相似:
|
|
|
5
0
对于您正在做的工作,您需要一个编码器/解码器来进行格式化。解码器获取原始数据并填充结构(在您的情况下,为数据的每个部分的副本分配空间),解码器编写原始二进制文件。 |
|
|
6
-1
(以前是'use std::vector') 编辑: 在阅读反馈时,我想我应该扩大我的答案。您可以在结构中有效地容纳两个可变长度的数组,如下所示,当文件数据超出范围时,将自动释放存储空间:
您必须从文件中逐段填充文件数据—读取每个缓冲区的长度,在目标向量上调用resize(),然后读取数据。(有一些方法可以更有效地做到这一点。在磁盘文件I/O的上下文中,我假设这无关紧要)。 顺便说一句,OP的技术不正确,即使是在他的“漂亮漂亮”的情况下,例如,最后只有一个VLA。
无法保证文件_数据与nodeheader类型正确对齐。更倾向于通过malloc()获取文件\u数据,它保证返回一个与任何类型对齐的指针,或者(更好)首先声明缓冲区是正确的类型:
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |