gpt4 book ai didi

c - 写入静态全局变量的访问冲突?

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:31 26 4
gpt4 key购买 nike

给定以下代码:

#include "stdafx.h"
#include "string.h"
static char *myStaticArray[] = {"HelloOne", "Two", "Three"};

int _tmain(int argc, _TCHAR* argv[])
{
char * p = strstr(myStaticArray[0],"One");
char hello[10];
memset(hello,0,sizeof(hello));
strncpy(hello,"Hello",6);
strncpy(p,"Hello",3); // Access Violation
return 0;
}

恰好在它尝试写入 myStaticArray[0] 地址时,我遇到了访问冲突。为什么这是个问题?

背景:我主要作为 C# 开发人员将旧的 C++ 移植到 C#,所以请原谅我的无知!这段代码在旧版本中显然不是问题,所以我很困惑......

最佳答案

char * p = strstr(myStaticArray[0],"One");

p 指向字符串文字“HelloOne”的一部分。您不得尝试修改字符串文字,这是未定义的行为。

通常,字符串文字存储在内存的只读部分,因此尝试写入它们会导致段错误/访问冲突。

关于c - 写入静态全局变量的访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10388548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com