这是我的 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);
}
编辑:
我讨厌这样:我花几个小时解决一个问题,然后寻求帮助,然后立即让它工作。答案如下。
最佳答案
我将其更改为传递下一个目录的完整路径,而不是相对路径。
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);
}
关于c - 当尝试在 C 中递归导航目录时,为什么会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23173969/