[整理]零长度数组

零长度数组 
========== 

GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例 
如: 

++++ include/linux/minix_fs.h 
 struct minix_dir_entry { 
        __u16 inode; 
        char name[0]; 
 }; 

结构的最后一个元素定义为零长度数组,它不占结构的空间。在标准 C 中则需要 

定义数组长度为 1,分配时计算对象大小比较复杂。 

标准C中不能这么写,数组大小至少为1:

 struct minix_dir_entry { 
        __u16 inode; 
        char name[1]; 
 }; 

那么怎么使用这个零长度数组呢,申请内存时,写:

struct minix_dir_entry *dir = malloc(sizeof(struct minix_dir_entry) + LENGTH);

LENGTH值你就可以自己定了,但是你这个struct minix_dir_entry真正占用的空间大小,无法再用sizeof操作来求取,有时需要在struct minix_dir_entry里加入个域值,比如int length;申请完内存后,将上面LENGTH值放入结构中的这个length。以后就可以求出内存的边界了,不然都不知道内存边界在哪里。


主要参考:

[精华] gcc核心扩展linuxforum转贴] http://www.chinaunix.net 作者:lenn

http://www.chinaunix.net/jh/4/704815.html

[经验分享] Gcc 嵌套函数 与零长度数组的 使用 作者:huzht

http://dev.10086.cn/cmdn/bbs/thread-14884-1-1.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值