由于某些特定字符串(如 . 和 usr)的 dirname api 而发生分段错误

Segmentation fault occurs because of dirname api for some particular strings (like . and usr)

由于 api dirname 我在用 C 编写的代码中使用将路径拆分为目录和文件名,因此我的程序中出现了段错误 (segfault) Linux.

dirmane用于获取目录名,basename用于获取文件名,按照here.

的说明

准系统代码如下,在Linux.

上编译运行良好
#include <stdio.h>
#define _GNU_SOURCE         
#include <string.h>

void main (void)
{
    char *dirc, *basec, *bname, *dname = NULL;
    char *path = "."; /* I compile this code, for different paths as given below*/

    dirc = strdup(path);
    basec = strdup(path);
    dname = dirname(dirc);
    if (dname == NULL)
    {
        /* precautionary check */
        printf("null pointer\n");
    }
    bname = basename(basec);
    printf("dirname=%s, basename=%s\n", dname, bname);
}

我在变量 path 中提供了不同类型的字符串,以查看它们如何拆分为 'directory' 和 'file name'。我期待根据上面给出的示例得到最终结果 link(粘贴在下面以供快速参考)。

当我将路径设置为以下任何示例时,由于 dirname 而出现段错误(如果我将其注释掉,则不会出现段错误)。

*path = "."
*path = ".."
*path = "usr"
*path = "usr/"

根据上面的 table,我应该得到的不是 SegFault,而是指向 '.' 的指针。对于这种情况,按目录名字符串。我无法得到它,因为发生了段错误。正如您在上面看到的,我还添加了一个空字符串检查,以捕获任何空指针问题,但程序也没有到达那里。

如果我在这个问题中遗漏了什么或某些信息不完整,请告诉我。

您没有包含 libgen.h 因此未声明 dirname 因此它被假定为 return 一个 int 因此您的程序已损坏并且出现段错误。