2011-11-01 35 views
-2

我有固定長度的字符數組用於存儲我解碼的數據。一旦完成解碼,我想將char數組的內容複製到char向量中以備後用。調試到「std:copy(...)」行時發生錯誤。我的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()); 
+2

發生了什麼錯誤?你的電腦是否着火了?你的編譯器是否拒絕編譯你的程序?您的程序是否終止了分段違規?你得到不正確的結果了嗎? – sarnold

+0

對不起,我的打字錯誤!矢量變量應該是m_cCalibrationID。 – GoldenLee

+0

@GoldenLee:不要輸入,而是寫一個最小的測試用例並複製粘貼。 –

回答

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 
+1

非常感謝GMan!我犯了一個可怕的錯誤。我已經通過使用以下語句解決了我的問題m_cCalibrationID = std :: vector (cCalibrationID,cCalibrationID + 4); – GoldenLee

+0

@GoldenLee:嘿,使用構造函數滑倒了我的想法。那很好。 – GManNickG

相關問題