因此,当我尝试运行一个递归打印文件和目录的路径的函数时,问题基本上出现。我运行程序时我在终端中遇到的问题是" 分段故障(核心倾倒("。
有什么建议我如何解决?
编辑:max_len定义为2048。
这是代码:
void list_recursive(char* path){
DIR* dir;
struct dirent *dirent;
char * name = malloc(sizeof(char) * MAX_LEN);
dir = opendir(path);
if(dir != NULL){
printf("SUCCESSn");
while((dirent = readdir(dir)) != NULL){
if(strcmp(dirent->d_name, ".") != 0 && strcmp(dirent->d_name, "..") != 0){
sprintf(name, "%s/%s", path, dirent->d_name);
printf("%sn", name);
}
}
free(name);
if(dirent->d_type == DT_DIR){
list_recursive(dirent->d_name);
}
closedir(dir);
}
else {
printf("ERRORn");
printf("invalid directory pathn");
}
}
何时退出时观察:
dirent = readdir(dir)) != NULL
so, dirent == NULL
。但是您有:
if(dirent->d_type == DT_DIR)
这是,将无效指针 - seg不满。如果 inside while?
,也许您想要这个顺便说一句,要调试此问题,我只是在您的代码中添加了一堆printfs
,以确定细分的确切行 - 这是小程序和快速修复的好练习。
这对我有用(还解决了递归论点(:
while((dirent = readdir(dir)) != NULL){
if(strcmp(dirent->d_name, ".") != 0 && strcmp(dirent->d_name, "..") != 0){
sprintf(name, "%s/%s", path, dirent->d_name);
printf("%sn", name);
if(dirent->d_type == DT_DIR){
list_recursive(name);
}
}
}