【发布时间】:2019-01-01 17:51:47
【问题描述】:
我正在尝试删除字符串末尾的空格。我有以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
char *trim(char *str) {
char *end;
end = str + strlen(str) - 1;
while(end > str && isspace((unsigned char)*end)) {
end--;
}
*(end++) = '\0'; //this line causes the segfault
return str;
}
int main(void) {
char *str = "mystring ";
printf("before trim string is %s\n", str);
printf("length before: %d\n", strlen(str)); //should be 10
str = trim(str);
printf("after trim string is %s\n", str);
printf("length after: %d\n", strlen(str)); //should be 8
return 0;
}
当我运行代码时,我遇到了分段错误。我不确定为什么将指针'end'增加1,然后将它指向的值从空格更改为空终止符会导致段错误。我已经读过在 C 中增加一个指针以使指针不指向数组的元素是未定义的行为。但是,“mystring”末尾的空格不仍然是 char 数组 str[] 的一部分吗?非常感谢任何帮助。
【问题讨论】:
-
因为字符串常量
"mystring "是常量。尝试使用它来初始化一个可修改的数组:char str[] = "mystring ".
标签: c string whitespace trim