1

我有char *RecBufferint *packetLength指向数据和大小

int i=0;
vector<char> temp;//copy the buffer
while(i<*packetLength)
{
temp.push_back(*(RecBuffer+i));
i++;
}

    ...do something 

//retrieve it now
RecBuffer = temp ????
4

5 回答 5

8

我相信填充向量的最简单方法是使用构造函数:

vector<char> temp(RecBuffer, RecBuffer + *packetLength);

至于取回它,请使用以下方法data

RecBuffer = temp.data();

注意:dataC++11在您不使用新标准编译的情况下可用,请&temp[0]按照@juanchopanza 的建议使用。

于 2013-02-15T15:44:16.967 回答
3

你可以说

RecBuffer = temp.data();

或者

RecBuffer = &temp[0];

如果你没有 c++11 支持。

但是您必须注意,当向量超出范围时,数据将被删除。如果调整向量的大小,您还将获得一个悬空指针。

于 2013-02-15T15:44:20.930 回答
1

您可以使用 的构造函数std::vector从以下位置复制数据RecBuffer

std::vector<char> temp(RecBuffer, RecBuffer + *PacketLength);

然后,您可以使用std::vector::data它来访问底层数组:

RecBuffer = temp.data();

temp当然,一旦被销毁,底层数组就不再存在。

于 2013-02-15T15:44:33.353 回答
0

尝试查找的方法,std::vector看看是否有一些有用的东西。

其中有一些算法<algorithm>很有用。
std::copy(temp.begin(), temp.end(), RecBuffer);

你可以做很长的路要走:

const unsigned int length = temp.size();
for (unsigned int i = 0; i < packetLength)
{
    RecBuffer[i] = temp[i];
}
于 2013-02-15T15:48:57.733 回答
-1

我觉得执行以下操作会更安全

free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);
于 2013-02-15T15:45:27.840 回答