为什么这段代码会产生错误?它不应该输出zbcde吗?
int main()
{
char *p="abcde";
*p='z';
printf("%s\n",p);
return 0;
}
您正在尝试修改字符串文字;这是未定义的行为。
进一步解释:“abcde”不是 achar *
而是 a const char *
。您应该执行以下解决方案之一:
char p[] = "abcde";
或者
char *p = strdup("abcde");
(在后一种情况下,不要忘记 free() p!)
char *p="abcde";
- 这会将abcde
文本段中的字符串作为只读数据保存,并且地址将保存在本地指针变量p
中。
*p = 'z'
将尝试将只读数据替换a
为z
. 这是一种未定义的行为,可能导致崩溃。
因此,将字符串声明为本地 char 数组变量,如下所示。
char p[] = "abcde"
因此,分配动态内存以保留如下所示的字符串。
char *p = strdup("abcde");
...
free(p);