1

可能重复:
为什么在写入字符串时会出现分段错误?

这是一个小功能,正在测试一些东西所以写了它。在这里,当我尝试增加字符串文字的字符值时,我遇到了分段错误。你能告诉我在这里做错了什么吗

#include <stdio.h>
int input_string(char *str)
{
  printf("%s\n", str);
  printf("%c\n", *str);
  printf("%c\n", (*str)++); // I get a segmentation fault here, cant i increment the value like this ?
}
void main()
{
  char *str = "andrew";
  input_string(str);
}
4

2 回答 2

2

这样char *str = "andrew";做是创建一个指向可能位于 .text (可执行代码所在的位置)上的字符串的指针,并尝试修改它是未定义的行为。

为此更改它:

char str[] = "andrew";

它将在堆栈分配的缓冲区中复制字符串,您可以安全地修改该缓冲区。

于 2013-01-15T02:26:29.887 回答
0

这:

char *str = "andrew";

表示 str 指向常量字符串文字的内容。如果您尝试更改它,您将获得未定义的行为。

如果要执行字符串操作,请定义一个字符数组。

于 2013-01-15T02:29:06.903 回答