我有以下程序给出运行时错误:
*"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)
导致此错误的原因是什么.
问题是字符串文字在技术上是一个'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)