修剪空间C时的SEGFAULT

时间:2014-08-27 09:52:54

标签: c string

您好我有这样的代码(在这里,在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?

1 个答案:

答案 0 :(得分:0)

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

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