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

时间:2014-07-28 17:36:53

标签: c++ struct memcpy

我坚持尝试将struct self和一个单词的结构大小复制到一个char数组中。

我知道memcpy并不安全,但这是我所知道的唯一方式,如果有人知道更好的方式来做同样的话。

疯狂的是char数组看起来像这样: 04 01 00 00 STRUCTDATA 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));

我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:0)

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

十六进制中的

04 01 00 00相当于4 + 256等于260.因此04 01 00 00是数字260的正确内部表示。

至于结果的第三部分,那么你正在复制指针eop的地址,而你似乎需要复制字符串文字“EOP”。

我认为这个定义没有任何意义

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

此外,使用变量eop会导致未定义的行为,因为std :: string类型的临时对象将在语句末尾被删除。

为什么不简单地写为

const char * eop = "EOP";

const char eop[] = "EOP";

在这两种情况下,您必须在eop的调用中使用标识memcpy,而不是使用表达&eop来指定正确的复制数据大小。

至于结构,那么无论它是否被正确复制都可以说没有,因为你没有显示结构定义以及你将要复制的结果。

答案 1 :(得分:0)

至少,在此声明之后:

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

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