柔性数组


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


c99 容许定义形式:ide

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


gun c 扩充定义形式:it

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


使用方法:建立时,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]=....
...di

释放时,
free(sample_tag);view


注意:sizeof(struct pppoe_tag)等于4

零长数组在有固定头部的可变对象上很是适用,咱们能够根据对象的大小动态地去分配结构体的大小。

相关文章
相关标签/搜索