我有以下简单的代码:
char *a = "aaaa";
*a = 'b'; // error here: access violation writing location
任何人都可以解释出现此错误的原因吗?这是否意味着我在初始化之后无法编辑a
?
答案 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