dirent的char d_name[1]问题

SunOS中dirent中的文件名定义为char d_name[0];
这样,分配的时候malloc分配空间给d_name但是并不d_name本身并不占用空间.若声明为指针,则会多4个字节.分配方式如下.实际上把d_name这个结构的空间和字符串的空间放在一起,
d_name就是name的首地址,起一个标号的作用.很明显,这个d_name必须是结构体中的最后一个元素,不然是不成立的.
struct dirent
{
   int len;
   char a[0];
};

struct dirent *fun(char *str, int len)
{
   struct dirent* n = (struct dirent*)malloc(len +1 + sizeof(struct dirent));
   if (!n)
      return NULL;
   n->len = len;
   memcpy(n->a, str, len);
   return n;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值