当我*可以*写入字符串对象时,为什么不能写入字符串文字?

use*_*196 5 c++ string stl

如果我定义如下的内容,

char  *s1 = "Hello";
Run Code Online (Sandbox Code Playgroud)

为什么我不能做下面这样的事情,

*s1 = 'w'; // gives segmentation fault ...why???
Run Code Online (Sandbox Code Playgroud)

如果我做下面的事情会怎么样

string s1 = "hello";
Run Code Online (Sandbox Code Playgroud)

我可以做下面这样的事情,

*s1 = 'w'; 
Run Code Online (Sandbox Code Playgroud)

Dou*_* T. 10

因为"Hello"创建了一个const char [].这衰弱到了const char*不是char*.在C++中,字符串文字是只读的.你已经创建了一个指向这样一个文字的指针,并试图写入它.

但是,当你这样做

string s1 = "hello";
Run Code Online (Sandbox Code Playgroud)

您将const char*"hello"复制到s1.第一个示例中的差异s1 指向只读"hello",而在第二个示例中,只读"hello"被复制到非const中s1,允许您访问复制字符串中的元素以执行您希望的操作.

如果你想对char*做同样的事情,你需要为char数据分配空间并将hello复制到其中

char hello[] = "hello"; // creates a char array big enough to hold "hello"
hello[0] = 'w';           //  writes to the 0th char in the array
Run Code Online (Sandbox Code Playgroud)

  • `char hello [] ="hello";`也可以. (2认同)
  • 只是为了正确:"hello"的类型不是char const*(或const char*,如果你坚持的话),但是char const [6]在第一次衰变为char const*时衰减(或者,接受被赋值为char*). (2认同)