我坚持尝试将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));
我希望有人可以帮助我。
答案 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")
的析构函数已经运行。