这段C代码有什么问题?

时间:2016-08-06 18:46:03

标签: c++ pointers memory copy

我是编程的新手,只是在玩一些函数,我想测试memcpy()函数,但我的代码只是在没有实际抛出错误的情况下破解,请你告诉我我做错了什么?

int main()
{
    char *psz = "Hello world!";
    char dst[1024];

    memcpy(psz, dst, sizeof(psz));

    return 0;
}

3 个答案:

答案 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 documentation

正确用法是

memcpy (destination, source, num );

memcpy (source, destination, num );