柔性數組


柔性數組是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

零長數組在有固定頭部的可變對象上非常適用,我們可以根據對象的大小動態地去分配結構體的大小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章