gpt4 book ai didi

c++ - 这是如何运作的?将任何内容复制到字节数组(字符)中

转载 作者:太空狗 更新时间:2023-10-29 23:29:09 26 4
gpt4 key购买 nike

struct MyRect
{
int x, y, cx, cy;
char name[100];
};

int main()
{
MyRect mr;
mr.x = 100;
mr.y = 150;
mr.cx = 600;
mr.cy = 50;
strcpy(mr.name, "Rectangle1");

MyRect* ptr;

{
unsigned char bytes[256];

memcpy(bytes, &mr, 256);

ptr = (MyRect*)bytes;
}

printf("X = %d\nY = %d\nCX = %d\nCY = %d\nNAME = %s\n",
ptr->x, ptr->y, ptr->cx, ptr->cy, ptr->name);

return 0;
}

我只是在测试如何将结构/类放入字节数组中,当它编译并运行时我感到很惊讶,printf 打印了我在 mr 变量中设置的所有值。

只是对“ptr”究竟指向什么有点困惑?它是否在某处为 ptr 分配了内存?

最佳答案

它的成功纯属偶然。

首先,您基本上是逐字节复制该结构,并使用 memcpy 将其放置在堆栈分配的缓冲区中。但是,您不应该在实践中这样做。这次碰巧起作用了,因为你的结构是 POD (普通旧数据或 C 结构),但如果您的结构是具有构造函数/复制构造函数或您拥有的 C++ 对象,您可能会感到非常惊讶。

其次,当您通过指针使用它时,包含该结构的堆栈分配缓冲区超出范围,所以您所做的完全是 undefined behavior .它的工作完全是偶然的,不能保证在不同的计算机上或使用不同的编译器,甚至在一天中的不同时间再次工作。

关于c++ - 这是如何运作的?将任何内容复制到字节数组(字符)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772331/

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