1

我在包含以下内容的行中收到段错误错误:

*pointer++ = *pointer_2++

不知道为什么。

字符串被声明为(在我的主目录中):

char *str = "Why doesn't this function work?"

这是我的功能:

void removewhitespace(char *str)
{
        // remove whitespace from the string.                                   
  char *pointer = str;
  char *pointer_2 = str;
 do{

    while (*pointer_2 == ' ' || *pointer_2 == '\n' || *pointer_2 == '\t')
      pointer_2++;

  }while (*pointer++ = *pointer_2++);

}
4

3 回答 3

6

这是因为您的函数修改了字符串,并且您将字符串文字的地址传递给它;就地修改字符串文字是未定义的行为。

改变这个

char *str = "Why doesn't this function work?";

对此

char str[] = "Why doesn't this function work?";

并且您的功能将按预期工作。

于 2012-11-02T04:40:20.097 回答
0
char *pointer = str;

此分配不是必需的,因为这是目标指针。您的 'pointer_2' 指向实际的字符串。所以你可以使用喜欢,

字符 * 指针;

字符 *pointer_2 = str;

于 2012-11-02T06:24:51.393 回答
0

你的 *str 的地址被指针改变了,所以 *p 保存地址,数组保存值

于 2012-11-02T10:16:20.557 回答