【发布时间】:2013-09-07 07:27:04
【问题描述】:
void main() {
char *x;
x="abc";
*x='1';
}
为什么会出现“访问冲突写入位置”错误?
我无法通过*x='1' 为x 赋值?
【问题讨论】:
void main() {
char *x;
x="abc";
*x='1';
}
为什么会出现“访问冲突写入位置”错误?
我无法通过*x='1' 为x 赋值?
【问题讨论】:
修改字符串字面量会导致未定义的行为,请尝试改用char 数组:
int main() {
char x[] = "abc";
*x ='1';
}
还请注意,您应该使用int main()。
或者,如果您更喜欢使用指针,请使用这个有点多余的示例:
int main() {
char x[] = "abc";
char *y = x;
*y ='1';
}
【讨论】:
strcpy 的第一个参数绝不应该是字符串文字。该规则不反对修改 char 指针,而是反对修改字符串文字。
这是错误的,因为您正在尝试修改字符串文字。它是在只读模式下创建的,如果您尝试更改它,那将是访问冲突并因此导致错误。
作为如何实现它的解决方案,您可以尝试使用 char 数组
【讨论】:
应用程序在多个内存区域(内存页面)中加载,代码只读可执行文件(程序计数器可以在其中运行),字符串文字可能理想地进入只读区域。
写入它会导致访问冲突。事实上,你得到了这种违规情况很好,你在运行 Windows 吗?这肯定会让我感到惊讶。
【讨论】: