为char指针赋值,但说出Access违规写入位置

时间:2013-09-07 07:27:04

标签: c string pointers char

void main() {
    char *x;
    x="abc";
    *x='1';
}

为什么会出现错误“访问违规写入位置”?

我无法通过x*x='1'分配值?

3 个答案:

答案 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吗?那会让我感到惊讶。