2016-08-18 143 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

它现在工作正常,我正在测试它复制缓冲区。谢谢 –