0

我有这个 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 的内容复制到 Packets[3] 中,知道 Packet [INDEX] 中每个数组的数据包内容会有所不同

我已经尝试过 memcpy

memcpy((void*)&Packets[i],(void*)&Packet,sizeof(PACKET));

没有运气

4

3 回答 3

5

怎么样Packets[3] = Packet;?这完全符合您的要求(将Packet作为指针的 的内容复制到Packets[3])。

如果要复制值,也可以使用赋值:*(Packets[3]) = *Packet;假设指针有效。编译器生成的赋值运算符 forPACKET应该可以正常工作。

在这种情况下我会避免memcpy,因为有些成员是std::string- 你一定会遇到麻烦。

于 2012-11-27T17:42:49.360 回答
0

啊! 就一件事:

PACKET* Packets[6];

不同于:

PACKET (*Packets)[6];

前者是一个指针数组(即6个指针),但后者是一个保存PACKET[6]数组地址的指针!

无论哪种情况,您都必须为Packet变量分配内存。memcpy否则分配将不起作用,除非分配了一些堆或堆栈内存。

于 2012-11-27T20:04:58.813 回答
0

希望数据包包含有效对象。Packets[i] 也指向分配的对象。

这样做: Packet[i] = Packet;

由于字符串对象在其对象中存储指针,并且只能使用赋值运算符进行复制。

于 2012-11-27T17:44:43.333 回答