ok 所以我想编写一个函数来查找给定目录作为输入的所有子目录。它还接受一个 int,以便可以跟踪级别。 返回值应该是一个 char* 数组,其中列出了所有子目录。 我认为递归函数更可取,但是我在设置正确的算法时遇到了麻烦。 该程序运行但在第二个子目录中它似乎无限期地阻塞。 代码如下(dict是一个模仿hashmap的struct):
char *search_dir(char* directory, int i) {
struct dirent *de;
DIR *dir;
dir = opendir(directory);
de = readdir(dir);
struct stat st;
struct dict *d = NULL, **l; //linked list
l = &d;
char *parent_name = malloc(MAXSIZE);
char *pardir = (char*) malloc(sizeof(char*) * MAXSIZE);
char *subdir = (char*) malloc(sizeof(char*) * MAXSIZE);
memset(parent_name, "\0", sizeof(parent_name));
char *result = malloc(MAXSIZE);
if(dir != NULL) {
while(de != NULL) {
*l = malloc(sizeof(**l) * 500);
lstat(de -> d_name, &st);
if(S_ISDIR(st.st_mode)) {
strcpy(parent_name, directory);
printf("PARENT_NAME INIT %s\n", parent_name);
(*l) -> key = parent_name;
(*l) -> value = de -> d_name;
printf("LVALUE%s\n", (*l) -> value);
(*l) -> idx = i;
strcpy(subdir, de -> d_name);
printf("SUBDIR%s\n", subdir);
sprintf(pardir, "%s%s", parent_name, subdir);
printf("PARDIR%s\n", pardir);
snprintf(subdir, "%s%s", pardir, subdir);
i++;
l = &(*l) -> next;
search_dir(subdir, i);
strcpy(result[i], pardir);
if(d -> value == NULL) {
pardir = "\0"; // exit cycle
break;
}
}
}
free(*l);
free(d);
}
free(parent_name);
return result;
}