Struct中的指针 – 未知大小的数组

我试图在C中实现 TLV (Type-Length-Value),但是我遇到了使动态大小的值正常工作的问题.

我的结构看起来像这样:

typedef struct __attribute__((packed)){
   unsigned char type;
   unsigned char length;
   unsigned char * value;
} TLV;

我试图将一个数组转换为结构,以便我可以轻松访问类型和长度.例如一个数组:

unsigned char test[5] = {(unsigned char)'T', 0x03, 0x01, 0x02, 0x03};

如果数组中的’T’是类型,则第一个0x03是长度.

我正在将数组转换为结构,如下所示:

TLV* tlv = (TLV*)test;

然而,当我尝试访问值数组时,即使我尝试访问值存储器地址的第一个元素(应该是长度之后的数组中的第一个元素),我也会遇到分段错误.

如何解决此分段错误?

不要将value声明为指针,而是将其声明为未知大小的数组unsigned char value [].

typedef struct __attribute__((packed))
{
   unsigned char type;
   unsigned char length;
   unsigned char value[];
} TLV;

执行此操作后,其余代码将按预期工作.

相关文章
相关标签/搜索