如何将char *复制到vector <char>并检索它?</char>

时间:2013-02-15 15:41:49

标签: c++ stl

我有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 ????

5 个答案:

答案 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);