C语言 数据结构 Linux

哪里导致了段错误啊?另外我想请教下readdir的具体运行流程是怎么样的

img

我本意是想将获取到的.c文件的路径完整的保存在链表中

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/799459
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Linux 上readdir 遍历文件夹按文件名排序
  • 除此之外, 这篇博客: Linux系统中获取文件属性信息stat相关函数 | 获取系统时间的相关函数 | 目录操作的相关函数中的 5.2 readdir函数 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    段错误可能是由于以下原因导致的: 1. opendir 函数返回了一个空指针,表示打开目录失败。在这种情况下,调用 readdir 函数会导致段错误。 2. readdir 函数在读取目录中的文件时,发生了错误,导致段错误。

    解决段错误问题的步骤如下:

    Step 1: 检查目录是否成功打开。若 opendir 返回的指针为空,则说明打开目录失败。这可能是由于目录不存在或者权限不足导致的。可以通过在调用 opendir 函数之后添加以下代码段来检查目录是否成功打开:

    if (dir == NULL) {
        printf("Failed to open directory.");
        return 1;
    }
    

    Step 2: 检查是否成功读取目录中的文件。在调用 readdir 之前,需要确认 opendir 返回的指针不为空。可以通过在调用 readdir 之前添加以下代码段来检查:

    if (dir == NULL) {
        printf("Directory not open.");
        return 1;
    }
    

    Step 3: 确保 readdir 返回的指针不为空。如果 readdir 返回的指针为空,表示已经读取完毕或者发生了错误。为了避免继续读取空指针导致段错误,可以使用以下代码段来检查:

    while ((entry = readdir(dir)) != NULL) {
        // 处理 entry
    }
    if (entry == NULL) {
        printf("Failed to read directory.");
        return 1;
    }
    

    Step 4: 检查循环结束的原因。如果在循环之后,还有任何与该目录相关的操作,需要确保关闭目录之前,已经读取了所有的文件。

    重新修改代码后,可以再次运行以查看错误是否已解决。

    关于 readdir 函数的运行流程,具体如下: 1. opendir 函数打开指定的目录,并返回一个指向 DIR 类型的指针,该指针用于后续操作。 2. readdir 函数接收 DIR 指针作为参数,读取目录中的一个文件条目,并返回一个指向 struct dirent 结构的指针,该结构包含有关文件的信息,如文件名、文件类型等。 3. 每次调用 readdir 函数,会返回目录中的下一个文件条目,直到读取完所有的文件条目或发生错误。当 readdir 函数返回 NULL 指针时,表示已经读取完所有文件或发生了错误。 4. 在使用完 readdir 返回的指针后,需要将其传递给函数 closedir,关闭目录,释放资源。

    以上是针对 readdir 函数可能出现的段错误的解决方案和运行流程的详细说明。如果问题仍然存在,可能需要进一步排查其他的错误原因。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^