这是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