我在我的程序中看到分段错误 (segfault) 的发生,因为我使用一个 apidirname
在我用 C for Linux 编写的代码中将路径拆分为目录和文件名。
dirmane
用于获取目录名,basename
用于获取文件名,按照这里的说明。
下面给出了准系统代码,它在 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
以查看这些字符串是如何拆分为“目录”和“文件名”的。根据上面链接中给出的示例,我期待最终结果(粘贴在下面以供快速参考)。
当我将路径设置为以下任何示例时,我会得到 SegFault,因为dirname
(如果我将其注释掉,那么我不会得到 segfault)。
*path = "."
*path = ".."
*path = "usr"
*path = "usr/"
根据上表,我不应该得到 SegFault,而是一个指向 '.' 的指针。在这种情况下按目录名字符串。我无法得到它,因为发生了段错误。正如您在上面看到的,我还添加了对空字符串的检查,以捕获任何空指针问题,但程序也没有到达那里。
让我知道我是否遗漏了某些内容或此问题中的某些信息不完整。