我正在编写一个简单的代码,用于从c中的字符串中删除空格,但是在编译后,我会收到以下消息:exc_bad_access(code = 2,adresss = ....)。它来自' *temp = *str'行,但是我不明白为什么?我该如何修复?
void removeSpaces(char * str)
{
char * temp = str;
while (*str != ' ') {
if (*str != ' ') {
*temp = *str;
temp++;
}
str++;
}
*temp = ' ';
}
传递如下声明的字符串
时,该功能正常工作char s[] = "Hallo World!";
但是,如果您将字符串声明为字符串字符串
的指针char *s = "Hallo World!";
您不应该修改字符串。
看来您正在传递字符串字面。temp
和str
指向同一字符串文字。使用语句*temp = *str;
,您正在修改不应修改的文字。
解决问题为temp
char *temp = malloc(strlen(str) + 1);