修改char *时访问冲突写入位置

时间:2014-01-12 14:26:02

标签: c++

我有以下简单的代码:

char *a = "aaaa";
*a = 'b'; // error here: access violation writing location

任何人都可以解释出现此错误的原因吗?这是否意味着我在初始化之后无法编辑a

1 个答案:

答案 0 :(得分:1)

字符串文字是不可变的。您不能尝试修改它们。

char* a = "aaaa";         // deprecated!
*a = 'b';                 // unsafe & undefined

您的编译器应该警告您,实际上,您的代码应该是:

const char* a = "aaaa";   // OK
*a = 'b';                 // can't compile

const阻止它进行编译。

我注意到your previous question中的问题是由于没有注意警告(和/或关闭它们)而导致 阅读编译器的警告。

看起来Microsoft Visual Studio 2012不会发出任何警告,但真的悲伤。

无论如何,如果你想将字符串文字的内容复制到本地副本中:

char a[] = "aaaa";        // OK: a copy
*a = 'b';                 // OK