0

const char *RecBuffer, int *packetLength指向数据和大小

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

现在发生的事情是我的 Recbuffer 包含许多浮点数和整数数据包,我将它们作为 UDP 数据包接收。但是当我从字符串中存储和检索它时,它包含垃圾。

我哪里错了?

4

2 回答 2

7

我怀疑std::string命名的实例在被使用packet之前被破坏或修改,RecBuffer意思RecBuffer是一个悬空指针。您需要复制其内容packet而不是存储对其内部成员的引用。char*而不是使用std::vector<char>(由 Bartek 评论)动态分配建议:

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 回答