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];

たとえば、Pac​​ket [INDEX] の配列ごとに Packet の内容が異なることを知っている場合、Packet の内容を Packets[3] にコピーするにはどうすればよいですか

私はmemcpyを試しました

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

運がない

4

3 に答える 3

5

どうPackets[3] = Packet;ですか?これはまさにあなたが要求したことを行います (Packetポインタである の内容を にコピーしますPackets[3])。

値をコピーしたい場合は*(Packets[3]) = *Packet;、ポインターが有効であると仮定して、代入も使用できます。コンパイラが生成した代入演算子は、PACKET問題なく動作するはずです。

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

Hope Packet には有効なオブジェクトが含まれています。また、Packets[i] は割り当てられたオブジェクトを指します。

これを行います: Packet[i] = Packet;

文字列オブジェクトはオブジェクトにポインターを格納し、代入演算子を使用してのみ複製できます。

于 2012-11-27T17:44:43.333 に答える