C++ 使用memcpy将多个数据复制到char中*
我一直在尝试将结构的大小、结构本身和一个单词复制到一个字符数组中 我知道memcpy是不安全的,但这是我唯一知道的方法,如果有人知道更好的方法来做同样的事情,就说出来 奇怪的是,字符数组看起来像这样: 04 01 00结构数据58 F9 57 00 前4个字节应为:260 最后一个应该是EOP\0 但事实并非如此 代码如下所示: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
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
时使用identifiereop
,而不是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();