C++ 使用memcpy将多个数据复制到char中*

C++ 使用memcpy将多个数据复制到char中*,c++,struct,memcpy,C++,Struct,Memcpy,我一直在尝试将结构的大小、结构本身和一个单词复制到一个字符数组中 我知道memcpy是不安全的,但这是我唯一知道的方法,如果有人知道更好的方法来做同样的事情,就说出来 奇怪的是,字符数组看起来像这样: 04 01 00结构数据58 F9 57 00 前4个字节应为:260 最后一个应该是EOP\0 但事实并非如此 代码如下所示: const char * eop = std::string("EOP").c_str(); char pData[sizeof(int) + sizeof(_welc

我一直在尝试将结构的大小、结构本身和一个单词复制到一个字符数组中

我知道memcpy是不安全的,但这是我唯一知道的方法,如果有人知道更好的方法来做同样的事情,就说出来

奇怪的是,字符数组看起来像这样: 04 01 00结构数据58 F9 57 00

前4个字节应为:260 最后一个应该是EOP\0

但事实并非如此

代码如下所示:

const char * eop = std::string("EOP").c_str();
char pData[sizeof(int) + sizeof(_welcomeMessage) + sizeof(eop)];
int packetSize = sizeof(_welcomeMessage);
memcpy(pData, &packetSize, sizeof(packetSize));
memcpy(pData + sizeof(int), &_welcomeMessage, sizeof(_welcomeMessage));
memcpy(pData + sizeof(int) + sizeof(_welcomeMessage), &eop, sizeof(eop));

我希望有人能帮我。

前四个字节确实等于260。:)

04 01 00
十六进制等于4+256,等于260。所以
04 01 00
是数字260的正确内部表示形式

对于结果的第三部分,您正在复制指针的地址
eop
,而您似乎需要复制字符串文字“eop”

我认为这个定义没有什么意义

const char * eop = std::string("EOP").c_str();
此外,使用varaible eop会导致未定义的行为,因为std::string类型的临时对象将在语句末尾被删除

为什么不简单地写为

const char * eop = "EOP";
或作为

在这两种情况下,您都必须在调用
memcpy
时使用identifier
eop
,而不是expression
&eop
来指定复制数据的正确大小


至于structire,由于没有显示结构定义以及复制后将获得的结果,因此无法说明它是否被正确复制。

至少在这句话之后:

const char * eop = std::string("EOP").c_str();

eop
指向不再有效的内存,因为
std::string(“eop”)
的析构函数已运行。

sizeof(eop)
不会执行您认为它会执行的操作。请提供一个(),允许我们重现您注意到的行为。另请注意,@dasblinkenlight指出,
sizeof(eop)
将产生与
sizeof(const char*)
相同的值,而不是指定的文本大小。@dasblinkenlight您是对的。我用Char [] = {‘e’,‘O’,’p’,‘0’}来固定它,Hm.,我觉得有更多的C++方式来做这个…它看起来非常像C。您应该将标记
C++
更改为
C
const char * eop = std::string("EOP").c_str();