gpt4 book ai didi

c - 试图在 C 字符串中将字符设置为 '\0' 的函数出现总线错误

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

我需要用 C 编写一个函数,给定一个路径,如 /usr/bin/wc,返回文件的父目录(这个将返回 /usr/bin).这是我的尝试:

char *get_parent_dir(char *path) {
char *head = path;
int i = strlen(path) - 1;

while (i > 0) {
if (path[i] == '/') {
path[i] = '\0';
break;
}
i--;
}

return head;
}

但是,在使用测试路径运行它时,我收到以下错误:Bus error: 10

谁能解释这是为什么,以及我可以更改什么以避免出现此错误?

编辑:我对该函数的用法类似于

char *full_path = "/usr/bin/wc";
get_parent_dir(full_path);

最佳答案

您有效地将字符串文字作为参数传递给 get_parent_dir,结果是该函数尝试修改字符串文字(通常无法修改)。在标准中,这意味着未定义的行为(这意味着观察到的行为符合标准规定的行为)。确切的症状取决于您的操作系统(和编译器),在这里我得到的是段错误。

参数的修改已经是有问题的,即使它传递了一个可变字符串。通常人们不希望函数修改传递给它们的字符串。相反,我建议您为父目录分配新空间(但这也需要一些小心,因为调用者在完成处理后应该释放结果):

char *get_parent_dir(char *path) {
char *head = strdup(path);
int i = strlen(path) - 1;

if( head == NULL )
return NULL;

path = head;

while (i > 0) {
if (path[i] == '/') {
path[i] = '\0';
break;
}
i--;
}

return head;
}

关于c - 试图在 C 字符串中将字符设置为 '\0' 的函数出现总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34128101/

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