gpt4 book ai didi

c - 修剪空间 C 时的 SEGFAULT

转载 作者:行者123 更新时间:2023-11-30 17:29:46 25 4
gpt4 key购买 nike

你好,我有这样的代码(在 stackoverflow 上找到)

   char *trim_whitespace(char *string)
{
char *str;
str = (char *) malloc(strlen(string) + 1);
memcpy(str, string, strlen(string));
printf("%d\n", strlen(str));
char *end;

if (str == NULL) {
return NULL;
}
// Trim leading space
while(isspace(*str)) str++;

if(*str == '\0') // All spaces?
return str;

// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace(*end)) end--;

// Write new null terminator
*(end+1) = '\0';

return str;

}

和主要部分

int main(int argc, char **argv){


char *t;
t = trim_whitespace(argv[1]);;
printf(";%s;\n",t);
free(t);
}

但现在失败了

*** Error in `./a.out': free(): invalid pointer: 0x00000000020dd014 ***
Aborted (core dumped)

如果我运行

trim_whitespace(argv[1]);

一切顺利,我得到了我想要的结果,它返回修剪过的字符串,但如果我运行这样的代码

trim_whitespace("abc");

它会因在线段错误而失败

*(end+1) = '\0';

请帮我解决我的问题。谢谢。附:这个函数从很多地方调用,是否可以改变trim_whitespace中的smth?

最佳答案

trim_whitespace("abc"); 将尝试修改常量数据。

"abc" 是一个常量,可以在常量空间中分配(即:内存中保留用于只读访问的位置)。

关于c - 修剪空间 C 时的 SEGFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524030/

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