您好我有这样的代码(在这里,在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]);
everythink没问题,我有结果,我想要,它返回修剪过的字符串,但如果我运行这样的代码
trim_whitespace("abc");
与
一起使用段错误会失败*(end+1) = '\0';
请帮我解决我的问题。谢谢。 附:从许多地方调用此函数,是否可以在trim_whitespace中更改smth?
答案 0 :(得分:0)
trim_whitespace("abc");
将尝试修改常量数据。
"abc"
是一个常量,可以在常量空间中分配(即:内存中为只读访问保留的位置)。