Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这段C代码有什么问题?_C++_Pointers_Memory_Copy - Fatal编程技术网

C++ 这段C代码有什么问题?

C++ 这段C代码有什么问题?,c++,pointers,memory,copy,C++,Pointers,Memory,Copy,我是编程新手,只是在玩一些函数,我想测试memcpy函数,但我的代码只是简单地中断了,没有实际抛出错误,你能告诉我我做错了什么吗 int main() { char *psz = "Hello world!"; char dst[1024]; memcpy(psz, dst, sizeof(psz)); return 0; } 目标psz指向一个常量字符串。 因此,正在报告错误。 你可能想这么做 memcpydst、psz、sizeofpsz 目标psz指向

我是编程新手,只是在玩一些函数,我想测试memcpy函数,但我的代码只是简单地中断了,没有实际抛出错误,你能告诉我我做错了什么吗

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

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

    return 0;
}

目标psz指向一个常量字符串。 因此,正在报告错误。 你可能想这么做
memcpydst、psz、sizeofpsz

目标psz指向一个常量字符串。 因此,正在报告错误。 你可能想这么做 memcpydst、psz、sizeofpsz

看一看

正确的用法是

memcpy (destination, source, num );
不是

请看下面的图片

正确的用法是

memcpy (destination, source, num );
不是


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));

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));

实际上是什么错误`您无法复制到静态分配的内存。它不会引发错误,只是在0x0F980E9A msvcr110d.dll@πάντα处显示未处理的异常ῥεῖ 对不起,你这是什么意思?我对这一切有点陌生。@JamesHiggins:请不要以会使答案无效的方式编辑帖子。什么错误实际上是“你不能复制到静态分配的内存中。它不会抛出错误,只是在0x0F980E9A msvcr110d.dll@πάντα处显示未处理的异常?”ῥεῖ 对不起,你这是什么意思?我对这一切都有点陌生。@JamesHiggins:请不要以会使答案无效的方式编辑帖子。strlenpsz+1会更好,以便获得“\0”字符strlenpsz+1会更好,以便获得“\0”字符