C 字符串的增量字符值

C 字符串的增量字符值,c,C,可能重复: 这是一个小函数,正在测试一些东西,所以写了它。在这里,当我尝试增加字符串文字的字符值时,我得到了一个分段错误。你能告诉我我做错了什么吗 #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 in

可能重复:

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

#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);
}
#包括
int输入_字符串(char*str)
{
printf(“%s\n”,str);
printf(“%c\n”,*str);
printf(“%c\n”,(*str)++);//我在这里遇到了一个分段错误,我不能这样递增值吗?
}
void main()
{
char*str=“安德鲁”;
输入字符串(str);
}

这是什么
char*str=“andrew”的作用是创建一个指向字符串的指针,该字符串可能位于.text(可执行代码所在的位置)上,尝试修改它是未定义的行为

将其更改为:

char str[] = "andrew";
它将在堆栈分配的缓冲区中复制字符串,您可以安全地修改该缓冲区。

此:

char *str = "andrew";
表示str指向常量字符串文字的内容。如果你试图改变它,你将得到未定义的行为


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

因此,任何类似char*ptr=“Stack”到char ptr声明的初始化都将类似于const char*ptr=“Stack”;是的,事实上,当您执行类似操作时,应该将其声明为
const
,以防止此类错误。