我正在学习C++。在据我所知这里所示,该节目,str1
和str2
店的每一个相关的字符串的第一个字符地址:为什么我会在一种情况下得到一个带有字符串文字的弃用转换警告,而不是另一种情况?
#include <iostream>
using namespace std;
int main()
{
char str1[]="hello";
char *str2="world";
cout<<str1<<endl;
cout<<str2<<endl;
}
然而,str1
不给任何警告,而与str2
我得到这个警告:
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char *str2="world";
这两个声明有什么区别,导致在第二种情况下警告,但不是第一种?
“str1和str2应存储字符串的第一个字符的地址”。这不是真的。 'str1'存储整个字符串本身的副本。它不存储任何“地址”。另一方面,'str2'确实存储地址。 – AnT
HI ANT,如果副本存储在str1中,那么将存储另一个“hello”副本?如果我们修改str1复制str str [0] ='H',这个改变会影响另一个副本吗? – Bahubali
最初的''hello''存储在静态和不可修改的内存中。当你执行'str [0] ='H''时,你修改存储在'str1'中的副本。原稿保持不变。 – AnT