0

const char *RecBuffer, int *packetLengthデータとサイズを指す

    string packet(RecBuffer,*packetLength);//store here
     ...do some stuff
    RecBuffer = packet.c_str();//retrieve it later

今何が起こっているのかというと、私の Recbuffer には多くの float と ints パケットが含まれており、それらを UDP パケットとして受け取ります。しかし、文字列から保存して取得すると、ゴミが含まれています。

どこが間違っていますか?

4

2 に答える 2

7

std::string名前付きのインスタンスpacketは、使用される前に破棄または変更されていると思われます。RecBufferつまりRecBuffer、ダングリング ポインターです。packet内部メンバーへの参照を保存するのではなく、コンテンツをコピーする必要があります。代わりに(Bartek がコメントしたように)char*を使用して提案を動的に割り当てる代わりに:std::vector<char>

std::vector<char> RecBuffer(packet.begin(), packet.end());

&RecBuffer[0]内部配列にアクセスするには(または、利用RecBuffer.data()可能な場合は c++11 で導入された) を使用します。

于 2013-02-15T15:33:12.297 に答える
1

memcpy を使用します。

RecBuffer[packet.size()]=0;
memcpy(RecBuffer, packet.c_str(), packet.size());
于 2013-02-15T15:33:27.220 に答える