当我尝试以递归方式导航C中的目录时,为什么会出现段错误?

时间:2014-04-19 18:41:08

标签: c recursion dirent.h

这是我的op / sys类中的项目。 我的最终目标是递归复制目录。

以下函数在看到目录时会导致段错误。 我还没有使用这些功能进行复制。我只想尝试导航。 source是我正在导航的目录,dest现在是占位符。

当dp是目录时,它在箭头处失败。

static void clone(const char* source, const char* dest){
    DIR *dirp;
    struct dirent *dp;
    dirp = opendir(source);
    dp = readdir(dirp);
    while (dp != NULL){
        if (strcmp(dp->d_name, "..") && strcmp(dp->d_name, "."))
        switch (dp->d_type) {
            case DT_DIR:
                printf("dir: %s\n", dp->d_name);
                //saved for making copy
->              clone(dp->d_name, dest);
                break;
            default:
                printf("fil: %s\n", dp->d_name);
                break;
        }
        dp = readdir(dirp);
    }
    closedir(dirp);
}

编辑:

我讨厌问题,然后寻求帮助,并立即开始工作。答案发布在下面。

1 个答案:

答案 0 :(得分:0)

我将其更改为传递下一个目录的完整路径,而不是相对路径。

static void clone(const char* source, const char* dest){
    DIR *dirp;
    struct dirent *dp;
    dirp = opendir(source);
    dp = readdir(dirp);
    while (dp != NULL){
        char rsource[512];
        strcpy(rsource, source);
        strcat(rsource, "/");
        strcat(rsource, dp->d_name);

        if (strcmp(dp->d_name, "..") && strcmp(dp->d_name, "."))
        switch (dp->d_type) {
            case DT_DIR:
                printf("dir: %s\n", dp->d_name);
                //saved for making copy

                clone(rsource, dest);
                break;
            default:
                printf("fil: %s\n", dp->d_name);
                break;
        }
        dp = readdir(dirp);
    }
    closedir(dirp);
}