在c,linux中递归列出目录和文件的分割故障(核心倾倒)



因此,当我尝试运行一个递归打印文件和目录的路径的函数时,问题基本上出现。我运行程序时我在终端中遇到的问题是" 分段故障(核心倾倒("。

有什么建议我如何解决?

编辑: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);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新