memcpy使用指针抛出访问冲突

bif*_*fta 1 c

我有一个关于memcopy的非常简单的问题,我已经能够修复但不明白为什么.以下代码在runtuime崩溃并出现"访问冲突":

char *src = "HELLO WORLD!";
char * dest = "hello world!";
memcpy(dest, src, strlen(src)+1);
Run Code Online (Sandbox Code Playgroud)

dest似乎足够大,据我所知,memcpy应该盲目地复制字节,所以我不明白这个问题.

将dest更改为数组例如可以char dest[13];解决问题,因此要求dest必须是未初始化的内存并创建数组才能为您执行此操作,而指针声明则不是吗?

干杯

Arj*_*ran 12

当你这样做时:

char *dest = "hello world!";
Run Code Online (Sandbox Code Playgroud)

"hello world!"保存在内存的只读部分中,并且指向的指针指向dest它,使得对此内存的任何写入操作都是非法的.因此,如果您尝试将其用作您的目的地memcpy; 这是一个访问冲突.

你应该使用:

char dest[] = "hello world!";
Run Code Online (Sandbox Code Playgroud)