我的std :: copy操作出了什么问题?

时间:2011-11-01 01:00:05

标签: c++ stl copy

我有固定长度的char数组,用于存储我的解码数据。完成解码后,我想将char数组的内容复制到char向量中供以后使用。调试到“std:copy(...)”行时发生错误。我的std :: copy用法有什么问题?

谢谢!

std::vector<char> m_cCalibrationID;
char cCalibrationID[5];
memcpy(cCalibrationID, pszData, 4);
cCalibrationID[4] = 0;

// Copy to vector
std::copy ( cCalibrationID, cCalibrationID + 4, m_cCalibrationID.begin() );

1 个答案:

答案 0 :(得分:4)

忽略你将它们命名为同一个东西而假装没有,你需要先为你的矢量分配空间:

char arr[5];
memcpy(arr, pszData, 4);
arr[4] = 0;

std::vector<char> vec(5); // contains five usable elements
std::copy(arr, arr + 5, vec.begin());
//                 ^^^  should be + 5, not + 4, to get null terminator

或者您可以使用std::back_inserter

char arr[5];
memcpy(arr, pszData, 4);
arr[4] = 0;

std::vector<char> vec; // contains zero usable elements
vec.reserve(5); // reserve space ahead of time
std::copy(arr, arr + 5, std::back_inserter(vec));

这将push_back每个复制的元素。那说,为什么不跳过中间人?

std::vector<char> vec(5);
std::copy(pszData, pszData + 4, vec.begin());
// vec[4] already initialized to zero