从C内存故障中删除字符串中的空格

A E*_*Elo 1 c

我正在编写一个简单的代码来从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';
}
Run Code Online (Sandbox Code Playgroud)

Wea*_*ane 8

传递一个像这样声明的字符串时,该函数工作正常

char s[] = "Hallo  World!";
Run Code Online (Sandbox Code Playgroud)

但是如果你像这样声明了字符串,那就是指向字符串文字的指针

char *s = "Hallo  World!";
Run Code Online (Sandbox Code Playgroud)

你不应该修改字符串.