我有这个c ++结构
struct PACKET
{
BOOL isTCPPacket;
BOOL isUDPPacket;
BOOL isICMPPacket;
BOOL isIGMPPacket;
BOOL isARPPacket;
BOOL isIPPacket;
struct PETHER_HEADER
{
string DestinationHost;
string SourceHost;
struct PROTOCOL_TYPE
{
string Name;
WORD Identifier;
} ProtocolType;
} EthernetHeader;
};
我有
PACKET* Packet;
PACKET* Packets[6];
如何将Packet的内容复制到数据包[3],例如,知道数据包内容因数据包中的每个数组而异[INDEX]
我已尝试将memcpy作为
memcpy((void*)&Packets[i],(void*)&Packet,sizeof(PACKET));
没有运气
答案 0 :(得分:5)
Packets[3] = Packet;
怎么样?这完全符合您的要求(将Packet
的内容(指针)复制到Packets[3]
)。
如果要复制值,也可以使用赋值:*(Packets[3]) = *Packet;
,假设指针有效。编译器为PACKET
生成的赋值运算符应该可以正常工作。
在这种情况下我会避免memcpy
,因为有些成员是std::string
- 你一定会遇到麻烦。
答案 1 :(得分:0)
Hope Pack包含有效对象。 Packets [i]也指向已分配的对象。
这样做: 包[i] =包;
由于字符串对象在其对象中存储指针,因此只能使用赋值运算符进行复制。
答案 2 :(得分:0)
啊!只有一件事:
PACKET* Packets[6];
不同于:
PACKET (*Packets)[6];
前者是一个指针数组(即6个指针),但后者是一个指向PACKET[6]
数组地址的指针!
在任何一种情况下,您都必须为Packet
变量分配内存。除非分配了一些堆或堆栈内存,否则memcpy
或赋值将不起作用。