【问题标题】:assign value to char pointer, but say Access violation writing location [duplicate]为char指针赋值,但说访问冲突写入位置[重复]
【发布时间】:2013-09-07 07:27:04
【问题描述】:
void main() {
    char *x;
    x="abc";
    *x='1';
}

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

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

【问题讨论】:

    标签: c string pointers char


    【解决方案1】:

    修改字符串字面量会导致未定义的行为,请尝试改用char 数组:

    int main() {
        char x[] = "abc";
        *x ='1';
    }
    

    还请注意,您应该使用int main()

    或者,如果您更喜欢使用指针,请使用这个有点多余的示例:

    int main() {
        char x[] = "abc";
        char *y = x;
        *y ='1';
    }
    

    【讨论】:

    • void strcpy(char *s, char *t) { while((*s = *t) != '\0') { s++; t++; } }
    • @user2756494 我假设你的意思是这个函数违反了规则?这不是真的,传递给strcpy 的第一个参数绝不应该是字符串文字。该规则不反对修改 char 指针,而是反对修改字符串文字。
    【解决方案2】:

    这是错误的,因为您正在尝试修改字符串文字。它是在只读模式下创建的,如果您尝试更改它,那将是访问冲突并因此导致错误。

    作为如何实现它的解决方案,您可以尝试使用 char 数组

    【讨论】:

      【解决方案3】:

      应用程序在多个内存区域(内存页面)中加载,代码只读可执行文件(程序计数器可以在其中运行),字符串文字可能理想地进入只读区域。

      写入它会导致访问冲突。事实上,你得到了这种违规情况很好,你在运行 Windows 吗?这肯定会让我感到惊讶。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 2015-08-15
        相关资源
        最近更新 更多