打印字符串出现意外错误

时间:2012-08-14 18:22:38

标签: c string pointers

为什么此代码会产生错误?它不应该输出zbcde吗?

int main()
{
char *p="abcde";
*p='z';
printf("%s\n",p);
return 0;
}

2 个答案:

答案 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);