BlueClue's Tech Blog

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

描述文件夹属性结构体struct dirent(可参考在线文档)的最后一个成员d_name,用以存储文件名称, 一些类Unix系统也会采用下面的定义:

struct dirent{
ino_t d_ino;
off_t d_off;
unsigned short d_reclen;
char d_name[1];
};

 显然对于一个用来存储字符串的数组,一个字节的空间只够存一个结束符'\0'的,这样做的目的是在利用struct dirent申请内存空间的时候,d_name可以按需申请,而不需要一次性开辟256字节的内存,下面是这样做的一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct dirstruct{
int len;
char name[1];
};
void main(){
char fname[256];
struct dirstruct* pdir;
printf("input a file name:");
gets(fname);
pdir =(struct dirstruct*) malloc(sizeof(struct dirstruct)+strlen(fname));
pdir->len = strlen(fname);
memcpy(&pdir->name[0],fname,pdir->len);
printf("name:%s,length:%d\n",pdir->name,pdir->len);
free(pdir);
}

 如此,在实例化结构体时可以自己增补d_name空间,处理上更为灵活,更节省内存空间。

posted on 2012-01-13 10:39  blueclue  阅读(4178)  评论(0编辑  收藏  举报