如何将struct内容复制到另一个数组结构

时间:2012-11-27 17:39:53

标签: c++ visual-c++ struct

我有这个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));

没有运气

3 个答案:

答案 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或赋值将不起作用。