柔性數組是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
零長數組在有固定頭部的可變對象上很是適用,咱們能夠根據對象的大小動態地去分配結構體的大小。