gpt4 book ai didi

c++ - 为什么修改指向字符串文字的指针的内容是错误的?

转载 作者:行者123 更新时间:2023-11-28 02:20:09 24 4
gpt4 key购买 nike

如果我写:

char *aPtr = "blue"; //would be better const char *aPtr = "blue"
aPtr[0]='A';

我有一个警告。上面的代码可以工作但不是标准的,它有一个未定义的行为,因为它是只读内存,指针指向字符串文字。问题是:为什么会这样?使用此代码:

char a[]="blue";
char *aPtr=a;
aPtr[0]='A';

没问题。我想了解幕后发生的事情

最佳答案

第一个是指向由编译器创建并放置在程序的只读部分中的只读值的指针。您不能修改该地址处的字符,因为它们是只读的。

第二个创建一个数组并从初始化程序中复制每个元素(有关更多详细信息,请参见 this answer)。您可以修改数组的内容,因为它是一个简单的变量。

第一个以它的方式工作,因为做任何其他事情都需要动态分配一个新变量,并且需要垃圾收集来释放它。这不是 C 和 C++ 的工作方式。

关于c++ - 为什么修改指向字符串文字的指针的内容是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32821634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com