gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:21:12 25 4
gpt4 key购买 nike

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

源程序:

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

当 mychar 的长度 <= 8 时,它被复制到资源中并被目标程序正常读取。但是,如果 mychar 的长度大于 8,则不会复制任何内容。

感谢您的宝贵时间。

最佳答案

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

第二,对于< 8您体验了所谓的 std::string 的 SSO ( Small String Optimization ) .许多 std::string 实现现在确实有这种优化。该值不会始终为 8。

第三,对于> 8您的结构拷贝中只有元数据(大小、容量、指向堆数据的指针)。所有数据都在堆中。 Read这个骨架实现。

已编辑:阅读 this post

数据共享:阅读 this post .

  1. https://learn.microsoft.com/en-us/windows/desktop/Memory/creating-named-shared-memory
  2. https://www.boost.org/doc/libs/1_38_0/doc/html/interprocess.html

关于C++将结构复制到另一个程序的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52243069/

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