void main() {
char *x;
x="abc";
*x='1';
}
为什么会出现错误“访问违规写入位置”?
我无法通过x
为*x='1'
分配值?
答案 0 :(得分:3)
修改字符串文字会导致未定义的行为,请尝试使用char
数组:
int main() {
char x[] = "abc";
*x ='1';
}
另请注意,您应该使用int main()
。
或者如果您更喜欢使用指针,请使用一个多余的示例:
int main() {
char x[] = "abc";
char *y = x;
*y ='1';
}
答案 1 :(得分:0)
这是错误的,因为您正在尝试修改字符串文字。它是以只读模式创建的,如果您尝试更改它,那么它将成为访问冲突,从而导致错误。
作为如何实现它的解决方案,您可以尝试使用char
数组
答案 2 :(得分:0)
应用程序加载到几个内存区域(内存页面),代码只读可执行文件(程序计数器可以在其中运行),字符串文字可能理想地进入只读区域。
写入它会导致访问冲突。事实上,如果您遇到违规行为,那么您运行的是Windows吗?那会让我感到惊讶。