2016-08-18 133 views
0

我正在寫一個視頻編碼器,我想複製緩衝區使用矢量由於某種原因std::copy只複製第一個字符。我的目標是複製緩衝區並使用fwrite將它們寫入文件。複製緩衝區與std ::複製

我使用谷歌本地客戶端不允許我從主線程有fwrite直接,所以我創建了一個新的線程,我必須緩衝區移動到fwrite

我標記的多線程這個問題以獲得您對這種處理緩衝區的方法的反饋。

std::vector<char> buffer_(4); 
char header[4]; 
header[0] = 'D'; 
header[1] = 'K'; 
header[2] = 'I'; 
header[3] = 'F'; 

unsigned dataArraySize = sizeof(header)/sizeof(char); 

std::copy(&header[0], &header[dataArraySize], buffer_.begin()); 
std::stringstream ss; 
std::string s; 



for (std::vector<char>::iterator it = buffer_.begin(); it!=buffer_.end(); ++it) 
{ 
    char c = *it; 
    ss << c; 
    ss >> s; 
    Logger::Log(s); 
} 

對於輸出我只得到d四次

+0

@DimChtz與OP一樣。 [該載體正在正確填充](http://coliru.stacked-crooked.com/a/fba93acdf2c04767)。問題存在於for循環中 – NathanOliver

+0

聽起來好像您可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

在顯示的代碼的上下文中,您的'std :: copy'調用看起來正確。但沒有必要,只需要'std :: vector buffer_(std :: begin(header),std :: end(header));'並且向量將使用數組中的數據進行初始化。請注意,我只會在代碼***的背景下發言,因爲您將它展示給我們***。例如,如果你將數組傳遞給一個函數,你不能使用'sizeof'技巧來獲得它的大小。 –

回答

2

副本是好的,它是從字符字符串這是不對的轉換,你可能只需要使用適當的構造函數

for (std::vector<char>::iterator it = buffer_.begin(); it!=buffer_.end(); ++it) 
{ 
    char c = *it; 
    Logger::Log(std::string(1, c)); 
} 

或者乾脆

for (char c : buffer_) { 
    Logger::Log(std::string(1, c)); 
} 

而且,潛在的,這取決於你的記錄器,串聯形成一個唯一字符串:

Logger::Log(std::string(buffer_.data(), buffer_.size())); 
+0

它現在工作正常,我正在測試它複製緩衝區。謝謝 –