【发布时间】:2012-12-03 07:56:20
【问题描述】:
我正在编写代码以使用depth first 算法遍历目录。问题是程序没有显示任何内容并给出Segmentation Fault error。我试图调试它,但它毫无价值,因为我还在学习东西。所以现在我需要专家的帮助。代码如下:
void func(char path[]);
int main(int argc, char *argv) {
char buf[255];
scanf("%s",buf);
func(buf);
return 0;
}
void func(char path[]) {
DIR *dirp;
struct stat states;
struct dirent *direntp;
printf("Inside\n");
dirp=opendir(path);
stat(path, &states);
while ((direntp=readdir(dirp)) != NULL) {
if (S_ISDIR(states.st_mode)) {
printf("Calling Func\n");
func(direntp->d_name);
chdir("..");
} else if (!S_ISDIR(states.st_mode)) {
printf(" %s\n", direntp->d_name);
} else if (!strcmp(direntp->d_name, ".") || !strcmp(direntp->d_name, "..")) {
continue;
}
}
return ;
}
【问题讨论】:
-
if(!S_ISDIR)和if(S_ISDIR)部分应该交换(更不用说if (cond) { } else if (!cond)是多余的......) -
也请正确缩进。
-
如果一个目录被传递给
func():难道你在这个目录中缺少chdir()? -
使用
-Wall -g编译你的代码,修复它直到没有更多的警告。如果出现段错误,请使用gdb查看位置。
标签: c unix directory depth-first-search