柔性数组是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
零长数组在有固定头部的可变对象上很是适用,咱们能够根据对象的大小动态地去分配结构体的大小。