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