柔性数组


柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)。


c99 允许定义形式:

struct pppoe_tag {
    __u16 tag_type;
    __u16 tag_len;
    char tag_data[];
} __attribute ((packed));


gun c 扩充定义形式:

struct pppoe_tag {
    __u16 tag_type;
    __u16 tag_len;
    char tag_data[0];
} __attribute ((packed));


使用方法:创建时,malloc一段结构体大小加上可变长数据长度的空间给它,可变长部分可按数组的方式访问,释放时,直接把整个结构体free掉就可以了

struct pppoe_tag *sample_tag;
__u16 sample_tag_len = 10;
sample_tag = (struct pppoe_tag *)malloc(sizeof(struct

pppoe_tag)+sizeof(char)*sample_tag_len);

sample_tag->tag_type = 0xffff;
sample_tag->tag_len = sample_tag_len;
sample_tag->tag_data[0]=....
...

释放时,
free(sample_tag);


注意:sizeof(struct pppoe_tag)等于4

零长数组在有固定头部的可变对象上非常适用,我们可以根据对象的大小动态地去分配结构体的大小。

你可能感兴趣的:(结构体,占位符,空间,柔性数组)