我有char *RecBuffer
,int *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 ????
答案 0 :(得分:8)
我认为填充向量的最简单方法是使用构造函数:
vector<char> temp(RecBuffer, RecBuffer + *packetLength);
至于检索它,请使用方法data
:
RecBuffer = temp.data();
注意:data
仅在C++11
中可用,如果您不使用新标准进行编译,请使用@juanchopanza建议的&temp[0]
。
答案 1 :(得分:3)
你可以说
RecBuffer = temp.data();
或
RecBuffer = &temp[0];
如果您没有c ++ 11支持。
但是你必须要注意,当向量超出范围时,数据将被删除。如果向量调整大小,你也会得到一个悬空指针。
答案 2 :(得分:1)
您可以使用std::vector
的构造函数来复制RecBuffer
中的数据:
std::vector<char> temp(RecBuffer, RecBuffer + *PacketLength);
然后,您可以使用std::vector::data
来访问基础数组:
RecBuffer = temp.data();
当然,一旦temp
被销毁,基础数组就不再存在。
答案 3 :(得分: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];
}
答案 4 :(得分:-1)
我觉得执行以下内容会更安全
free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);