C++ C++;将结构复制到另一个程序的资源

C++ C++;将结构复制到另一个程序的资源,c++,struct,resources,C++,Struct,Resources,我正试图复制一个结构以供另一个程序读取 源程序: struct datas{ std::string key; }; datas mystructure = datas(); std::string mychar = "mychar";// if length of char > 8, it doesn't get copied. mystructure

我正试图复制一个结构以供另一个程序读取

源程序:

        struct datas{               
            std::string key;
        };

        datas mystructure = datas();
        std::string mychar = "mychar";// if length of char > 8, it doesn't get copied.

        mystructure.key = mychar;

        WriteToResources(param, 0, (BYTE*)&mystructure, sizeof(mystructure));
目的地计划:

struct datas{               
            std::string key;
        };

datas mystructure;
memcpy(&mystructure, pbindata, rsrcsize);

std::cout << (char*)mystructure.key.c_str();
结构数据{
std::字符串键;
};
数据结构;
memcpy(和mystructure、pbindata、rsrcsize);
无法复制任何内容


谢谢您的时间。

首先,我不建议对生产代码执行此操作。请使用适当的数据共享机制。您现在可以通过使用普通
char数组
来解决这个问题,因为编译时已知大小,而不是
std::string
,后者可能会在头部为长字符串分配内存

Second,对于
<8
您将体验到
std::string
的所谓SSO()。现在很多std::string实现都有这种优化。此值不会始终为8

Third,对于
>8
,您的结构副本中只有元数据(大小、容量、指向堆数据的指针)。所有数据都在堆中。这是一个框架实现

编辑:也阅读

数据共享:读取


  • 不可能以这种方式编写像string这样的复杂类型,因为string类内部包含指针,当您读回它们时,它们没有任何意义。而是写出字符串长度,后跟字符串字符。当您读回时,请执行相反的操作。您是否尝试使用char数组而不是std::string,后者在数据长度增加时对小字符串和堆数据进行小字符串优化?好的,我将尝试这样做,感谢您的快速回答。通过memcpy或通过从实例指针读/写对结构进行长度序列化时产生差异的原因充其量是不安全的。如果struct/class有其他简单的旧数据类型(int、char、double等…或其数组),则绝对不起作用。你能说出一些数据共享机制吗?非常感谢。添加了一些共享机制。