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

时间:2015-05-07 08:09:14

标签: 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';
}

2 个答案:

答案 0 :(得分:8)

当传递一个像这样声明的字符串

时,该函数工作正常
char s[] = "Hallo  World!";

但是如果你声明这样的字符串,作为指向字符串文字的指针

char *s = "Hallo  World!";

你不应该修改字符串。

答案 1 :(得分:2)

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

要解决问题,请为temp

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