柔性數組


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

零長數組在有固定頭部的可變對象上很是適用,咱們能夠根據對象的大小動態地去分配結構體的大小。

相關文章
相關標籤/搜索