gnuc中的变长结构

gnuc中的变长结构,c,linux,struct,C,Linux,Struct,是否能够在gnuc中定义一个可变长度结构来表示如下对象: field1: fixed 4bytes; field2: length of field3 field3: variable length field4: length of field5 field5: variable length field6: fixed 8bytes field7: fixed 1byte 我知道在gnuc中,我们可以使用零大小数组来实现可变长度结构,例如 typedef struct varStruct{

是否能够在gnuc中定义一个可变长度结构来表示如下对象:

field1: fixed 4bytes;
field2: length of field3
field3: variable length
field4: length of field5
field5: variable length
field6: fixed 8bytes
field7: fixed 1byte
我知道在gnuc中,我们可以使用零大小数组来实现可变长度结构,例如

typedef struct varStruct{
  int foo1;
  int foo2[0];
}varStruct;
但是上述用法需要在结构的尾部放置可变长度字段。
如果它们是在中间的?

不可能,因为编译器(负责和)不能计算<代码>字段4//>和<代码>字段5>代码>的偏移量。p> 不可能,因为编译器(负责和)将无法计算
field4
field5
的偏移量

您需要使用3个结构执行此操作,并在运行时执行一些地址算法:

struct1:
  field1: fixed 4bytes;
  field2: length of field3
  field3: variable length

struct2:
  field4: length of field5
  field5: variable length

struct3:
  field6: fixed 8bytes
  field7: fixed 1byte

您需要使用3个结构执行此操作,并在运行时执行一些地址算法:

struct1:
  field1: fixed 4bytes;
  field2: length of field3
  field3: variable length

struct2:
  field4: length of field5
  field5: variable length

struct3:
  field6: fixed 8bytes
  field7: fixed 1byte

不能有一个以上的变量数组或中间变量数组。想想看,如果长度

field2
可变,编译器如何知道
field3
field4
从哪里开始

如果
field1
包含接下来两个字段的长度,则可以手动读取结构的成员。示例代码(读作伪代码):


不能有一个以上的变量数组或中间变量数组。想想看,如果长度

field2
可变,编译器如何知道
field3
field4
从哪里开始

如果
field1
包含接下来两个字段的长度,则可以手动读取结构的成员。示例代码(读作伪代码):


如果将这些可变长度字段的长度添加到此结构中会怎么样?我已经更改了结构。更具体地说,生成读取字段长度的操作并为后面的字段使用适当的偏移量是非常简单的。但是C没有这样做的工具。如果将这些可变长度字段的长度添加到此结构中会怎么样?我已经更改了结构。更具体地说,生成读取字段长度的操作并为后面的字段使用适当的偏移量是非常简单的。但C没有这样做的设施。