如果我定义如下的内容,
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)