这是linux内核用来去除字符串中前导和尾随空格的代码:

char *strstrip(char *s)
{
        size_t size;
        char *end;

        size = strlen(s);

        if (!size)
                return s;

        end = s + size - 1;
        while (end >= s && isspace(*end))
                end--;
        *(end + 1) = '\0';

        while (*s && isspace(*s))
                s++;

        return s;
}

在这里我这样使用它:
int main( void ){

    /* strip test*/
    char buffer2[60];
    char* testy2 = buffer2;
    testy2 = "       THING!      ";
    printf("The stripped string: \"%s\"\n",strstrip(testy2));
    return 0;
}

该程序编译得很好,但在执行时会声明:
Segmentation fault (core dumped)
为什么会这样?

最佳答案

testy2 = "       THING!      ";

testy2设置为指向字符串文本。这可能存在于只读存储器中,因此不能被strstrip写入。
您需要为testy2分配内存
const char* s = "       THING!      ";
testy2 = malloc(strlen(s)+1);
strcpy(testy2, s);
....
free(testy2);

或者,更简单的是,只需使用要操作的字符串初始化buffer2
char buffer2[] = "       THING!      ";
printf("The stripped string: \"%s\"\n",strstrip(buffer2

10-08 20:02