解析C++""x"处的指令引用"y"处的内存

0 c++ string

我有以下程序给出运行时错误:

*"x"处的指令引用"y"处的内存

无法写入内存.*

码:

int main() {
    char *str1 = "Rain";
    char *&str2 = str1;    
    cout << str1 << str2 << endl;
    *str1 = 'M';
    cout << str1 << str2 << endl;

    //Here the error happens
    *str2 = 'P';          

    cout << str1 << str2 << endl;    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

导致此错误的原因是什么.

Mar*_*ork 6

问题是字符串文字在技术上是一个'char const指针'.从右向左阅读指向不可修改字符的指针.由于与'C'的向后可比性,编译器可以自动转换为'char指针'.这并不意味着底层类型已经改变,因此修改底层const对象是未定义的行为.

char         *str1 = "Rain";  // Lie this is not a char* 
char const*   str9 = "Rain";  // This is the real type.

// String lieterals =>   "XXXXX" are char const*
Run Code Online (Sandbox Code Playgroud)

如果要修改字符串,则需要声明一个数组.

char         str6[] = "Rain";
str6[0] = 'M';
*str6   = 'P';
Run Code Online (Sandbox Code Playgroud)