gpt4 book ai didi

c - 在 C、Linux 中递归列出目录和文件时出现段错误(核心已转储)

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:38 25 4
gpt4 key购买 nike

基本上,当我尝试运行一个递归打印文件和目录路径的函数时,问题就出现了。我在运行程序时在终端遇到的问题是“Segmentation fault (core dumped)”。

有什么解决办法的建议吗?

编辑: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("SUCCESS\n");
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("%s\n", name);
}
}
free(name);
if(dirent->d_type == DT_DIR){
list_recursive(dirent->d_name);
}
closedir(dir);
}
else {
printf("ERROR\n");
printf("invalid directory path\n");
}
}

最佳答案

退出while时观察:

dirent = readdir(dir)) != NULL

所以,dirent == NULL。但是你有:

if(dirent->d_type == DT_DIR)

也就是说,取消引用 NULL 指针 - 出现段错误。或许您期间想要这个?

顺便说一句,为了调试这个,我只是在你的代码中插入了一堆 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("%s\n", name);
if(dirent->d_type == DT_DIR){
list_recursive(name);
}
}
}

关于c - 在 C、Linux 中递归列出目录和文件时出现段错误(核心已转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com