描述文件夹属性结构体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空间,处理上更为灵活,更节省内存空间。

相关文章:

  • 2021-10-06
  • 2021-07-15
  • 2022-12-23
  • 2021-04-09
  • 2022-12-23
  • 2021-07-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-10-19
  • 2021-10-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-26
  • 2021-06-23
相关资源
相似解决方案