Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将char*复制到向量<;char>;然后取回它?_C++_Stl - Fatal编程技术网

C++ 如何将char*复制到向量<;char>;然后取回它?

C++ 如何将char*复制到向量<;char>;然后取回它?,c++,stl,C++,Stl,我有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 ???? inti=0; 向量温度//复制缓冲区 而(i我认为填

我有
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 ????
inti=0;
向量温度//复制缓冲区

而(i我认为填充向量的最简单方法是使用构造函数:

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

注:
数据仅在
C++11
中可用。如果您不使用新标准编译,请使用@juanchopanza建议的
&temp[0]

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

vector<char> temp(RecBuffer, RecBuffer + *packetLength);
注意:
数据仅在
C++11
中可用。如果您不使用新标准编译,请使用@juanchopanza建议的
&temp[0]

您可以这样说

RecBuffer = temp.data();

如果您没有c++11支持

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

您可以这样说

RecBuffer = temp.data();

如果您没有c++11支持


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

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

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

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

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

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

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

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

free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);

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

free(RecBuffer);
RecBuffer = (char *) malloc(sizeof(char) * packetLength);
memcpy(RecBuffer, temp.data(), packetLength);

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

中有一些算法非常有用。
std::复制(临时开始(),临时结束(),RecBuffer);

你可以走很长的路:

const unsigned int length = temp.size();
for (unsigned int i = 0; i < packetLength)
{
    RecBuffer[i] = temp[i];
}
const unsigned int length=temp.size();
for(无符号整数i=0;i
尝试查找
std::vector的方法,看看是否有有用的东西

中有一些算法非常有用。
std::复制(临时开始(),临时结束(),RecBuffer);

你可以走很长的路:

const unsigned int length = temp.size();
for (unsigned int i = 0; i < packetLength)
{
    RecBuffer[i] = temp[i];
}
const unsigned int length=temp.size();
for(无符号整数i=0;i
RecBuffer的定义是什么?
RecBuffer的定义是什么?
RecBuffer
?这是迄今为止最好的答案。如果向量已经被定义,请不要忘记
std::vector::assign
成员函数constructed@111111是的,但他的用例似乎不需要这个。不过你提到它还是很好的。@111111耶啊,这没有被提及。谢谢你(1;)这是迄今为止最好的答案。如果向量已经被指定,不要忘记
std::vector::assign
成员函数constructed@111111是的,但是他的用例似乎不需要这个。你提到它还是很好的。@111111是的,这没有被提及。谢谢你+1;)无法从“std::vector*”转换为“char*”+1太好了,你提到数据只能在
C++11
中工作。无法从“std::vector*”转换为“char*”+1太好了,你提到数据只能在
C++11
中工作,我忘了提到这一点。