可变长数组

来源:互联网 发布:苹果5s怎么能用4g网络 编辑:程序博客网 时间:2024/05/16 18:09

最近项目中需要目录遍历,把遍历到的文件/文件夹保存到数据结构中,其他模块根据索引找对对应的文件名和路径。可变长数组相比链表的好处是省去了查找环节,提高效率。


#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;}




0 0