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