-1

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

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

2 回答 2

2

您正在尝试修改字符串文字;这是未定义的行为。

进一步解释:“abcde”不是 achar *而是 a const char *。您应该执行以下解决方案之一:

char p[] = "abcde";

或者

char *p = strdup("abcde");

(在后一种情况下,不要忘记 free() p!)

于 2012-08-14T18:24:38.910 回答
2

char *p="abcde";- 这会将abcde文本段中的字符串作为只读数据保存,并且地址将保存在本地指针变量p中。

*p = 'z'将尝试将只读数据替换az. 这是一种未定义的行为,可能导致崩溃。

因此,将字符串声明为本地 char 数组变量,如下所示。

char p[] = "abcde"

因此,分配动态内存以保留如下所示的字符串。

char *p = strdup("abcde");
...
free(p);
于 2012-08-14T18:26:18.923 回答