我是编程的新手,只是在玩一些函数,我想测试memcpy()
函数,但我的代码只是在没有实际抛出错误的情况下破解,请你告诉我我做错了什么?
int main()
{
char *psz = "Hello world!";
char dst[1024];
memcpy(psz, dst, sizeof(psz));
return 0;
}
答案 0 :(得分:2)
memcpy()
的前两个参数值是向后的。 memcpy()
的第一个参数是目的地,第二个参数是来源。您正在尝试将本地(未初始化的)缓冲区复制到字符串文字的内存中。字符串文字存储在只读内存中,这就是您遇到运行时错误的原因。
此外,您使用sizeof()
也是错误的。 psz
被声明为指针。指针的大小在32位系统上是4个字节,在64位系统上是8个字节。如果您反转缓冲区参数,则在32位系统上复制Hell
,在64位系统上复制Hello wo
。
我怀疑你打算做以下事情:
memcpy(dst, psz, strlen(psz)+1);
或者也许:
char psz[] = "Hello world!";
char dst[1024];
memcpy(dst, psz, sizeof(psz));
答案 1 :(得分:1)
目标psz指向一个常量字符串。 所以报告错误。 你可能想要这样做 memcpy(dst,psz,sizeof(psz));
答案 2 :(得分:1)
正确用法是
memcpy (destination, source, num );
不
memcpy (source, destination, num );