gpt4 book ai didi

C 字符串操作(切割一些特殊的 char* 尾部)

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

为什么我不能得到“cd fjadf”?
程序总是向我显示 Bus error: 10...

我想用这个super_cut_tail()函数来截断用户指定的///fjdakf。但是为什么这个功能不能实现呢?

char* super_cut_tail(char *char_arg, char *special) {
char *special_ptr;
special_ptr = strstr(char_arg, special);
int len = (int)strlen(char_arg) - (int)strlen(special_ptr);
char_arg[len] = '\0';
char_arg = strdup(char_arg);
return char_arg;
}

int main(int argc, char * argv[])
{
char *test = "cd fjadf///fjdakf";
char *outcome;
outcome = super_cut_tail(test, "///");
printf("test: %s\n", test);

return 0;
}

最佳答案

您的程序表现出未定义的行为,因为您正在修改用于初始化 test 的字符串。当您使用时:

char *test = "cd fjadf///fjdakf";

"cd fjadf///fjdakf" 保存在程序的只读内存中。修改您在行中所做的字符串

char_arg[len] = '\0';

是未定义行为的原因。

使用:

char test[] = "cd fjadf///fjdakf";

您可以做的另一件事是使用:

char const* test = "cd fjadf///fjdakf";

并在尝试修改字符串之前首先在 super_cut_tail 中复制该字符串。

char* super_cut_tail(char const* char_arg, char *special) {
char* ret_string = strdup(char_arg);
char *special_ptr;
special_ptr = strstr(ret_string, special);
int len = (int)strlen(ret_string) - (int)strlen(special_ptr);
ret_string[len] = '\0';
return ret_string;
}

关于C 字符串操作(切割一些特殊的 char* 尾部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29359994/

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