2013-02-17 88 views
0

我有一个矢量<char>用零字符串

vector<char> sectionData; 

,我想看看它的content.I尝试以下

string sectionDataStr = string(sectionData.begin(),sectionData.end()); 

但我只得到sectionData的部分所呈现的字符串,因为sectionData包含零。我可以做什么,如果有的话我想要读取整个数据到字符串?

我不能老是使用std ::法院 感谢

+3

*你正在*复制整个字符串。你只是不能以有意义的方式打印*。如果你只是'std :: cout << sectionDataStr'你应该事实上得到一切。 – 2013-02-17 11:49:37

+0

您*成功*复制了整个字符串。尝试'fwrite(sectionDataStr.c_str(),1,sectionDataStr.size(),stdout);' – phoeagon 2013-02-17 11:55:57

回答

2

您的问题不存在。这里有一个简单的例子:

#include <string> 
#include <iostream> 

int main() 
{ 
    std::cout << std::string { 'a', '\0', 'b', '\0', 'c' } << std::endl; 
} 

现在检查输出:

$ ./a.out | hexdump -C 

00000000 61 00 62 00 63 0a 

##   a \0 b \0 c \n 

正如你所看到的,这一切都没有。


或者(以下你的编辑):

#include <cstdio> 

std::fwrite(sectionDataStr.data(), sectionDataStr.size(), stdout); 
0

你的问题是不是与字符串,但与输出。根据您使用的内容,输出例程可能会停止在字符串的前0位。如果你不想这样做,那么你可能需要使用类似的东西来转换输出的缓冲区:

std::replace(sectionData.begin(), sectionData.end(), '\0', ' ')