Что не так с моей операцией std :: copy? - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть массив символов фиксированной длины, используемый для хранения моих декодированных данных. После окончания декодирования я хочу скопировать содержимое массива 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 Ответ

4 голосов
/ 01 ноября 2011

Не обращая внимания на то, что вы назвали их одинаковыми, и притворяясь, что вы этого не сделали, вам нужно сначала выделить место для вашего вектора:

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
...