可变长数组
最近项目中需要目录遍历,把遍历到的文件/文件夹保存到数据结构中,其他模块根据索引找对对应的文件名和路径。可变长数组相比链表的好处是省去了查找环节,提高效率。
#define PATH_LEN 256 #define NAME_LEN 128 #define STEP_LEN 1024//每次增加1024个指针数组 typedef struct { char file_path[PATH_LEN]; char file_name[NAME_LEN]; }FileInfo; typedef struct { FileInfo **file_info; unsigned int file_num; unsigned int file_max_num; }FileNode; static int file_node_new(FileNode *node) { node->file_info = (FileInfo **)malloc(sizeof(FileInfo *)*STEP_LEN); node->file_num = 0; node->file_max_num = STEP_LEN; return 0; } static int file_node_add(FileNode *node, char *name, char *path) { FileInfo **tmp = NULL; FileInfo *tmp2 = NULL; unsigned int num = 0; if(node->file_num >= node->file_max_num) { tmp = (FileInfo **)malloc(sizeof(FileInfo *)*(STEP_LEN + node->file_max_num)); memcpy(tmp, (node->file_info),sizeof(FileInfo *)*(node->file_num)); free(node->file_info);node->file_info=NULL; node->file_info = tmp; node->file_max_num = node->file_max_num + STEP_LEN; } tmp2 = (FileInfo *)malloc(sizeof(FileInfo)); if(NULL == tmp2){return -1;} strcpy(tmp2->file_name,name); strcpy(tmp2->file_path,path); num = node->file_num; (node->file_info)[num] = tmp2; node->file_num++; return 0; } static int file_node_delete(FileNode *node) { int i = 0; for(i=0; i<node->file_num; i++) { if(NULL != (node->file_info)[i]) { free((node->file_info)[i]); (node->file_info)[i] = NULL; } } free(node->file_info);node->file_info = NULL; return 0; }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Linux安装配置php7+nginx
- 下一篇: Linux PHP7编译并与Nginx结合