我正在编写一个简单的代码来从C中的字符串中删除空格但是我在编译后得到以下消息:EXC_BAD_ACCESS(code = 2,adresss = ....)。 它来自线路' * temp = * str'但我不明白为什么?我该如何解决?
void removeSpaces(char * str)
{
char * temp = str;
while (*str != '\0') {
if (*str != ' ') {
*temp = *str;
temp++;
}
str++;
}
*temp = '\0';
}
答案 0 :(得分:8)
当传递一个像这样声明的字符串
时,该函数工作正常char s[] = "Hallo World!";
但是如果你声明这样的字符串,作为指向字符串文字的指针
char *s = "Hallo World!";
你不应该修改字符串。
答案 1 :(得分:2)
您似乎正在传递字符串文字。 temp
和str
指向相同的字符串文字。使用语句*temp = *str;
,您正在修改不应修改的文字。
要解决问题,请为temp
char *temp = malloc(strlen(str) + 1);