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



我正在编写一个简单的代码,用于从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!";

您不应该修改字符串。

看来您正在传递字符串字面。tempstr指向同一字符串文字。使用语句*temp = *str;,您正在修改不应修改的文字。

解决问题为temp

分配内存
char *temp = malloc(strlen(str) + 1);   

最新更新