gpt4 book ai didi

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

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

由于 api dirname,我在我的程序中看到了段错误 (segfault),我在用 C 为 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 中提供了不同类型的字符串,以查看它们如何拆分为“目录”和“文件名”。根据上面链接中给出的示例,我期待最终结果(粘贴在下面以供快速引用)。

enter image description here

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

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

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

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

最佳答案

您不包含 libgen.h,因此未声明 dirname,因此假定返回一个 int,因此您的程序已损坏,您会遇到段错误。

关于c - 由于某些特定字符串(如 . 和 usr)的 dirname api 而发生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34607621/

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