我有以下程序给出了运行时错误:
*“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;
}
此错误的原因是什么。
答案 0 :(得分:6)
问题是字符串文字在技术上是'char const pointer'。从右向左阅读指向不可修改字符的指针。由于与'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*
如果你想修改字符串,你需要做的是声明一个数组。
char str6[] = "Rain";
str6[0] = 'M';
*str6 = 'P';