我有stringstream对象。它通过
填写stringstream ss;
boost::iostreams::copy(inp,ss);
来自
boost::iostreams::filtering_streambuf<boost::iostreams::input> inp;
并且实际上保存了ungzipped文件。
现在,如果我使用
将stringstream内容刷新到文件中std::ofstream ofs(path_to_file,std::ios_base::out|std::ios_base::binary);
ofs << ss.rdbuf();
一切都好。文件中包含完整的正确数据。
但是,如果我而不是像这样刷新文件构造字符串
std::string s = ss.str();
内容在中间某处被截断。它不是持久性错误,显然取决于字符串缓冲区的内容。
内容是多种语言的HTML文件。
它能是什么?感谢。
答案 0 :(得分:5)
您如何确定内容被截断? stringstream
可以包含空字符,std::string s = ss.str()
会将这些空字符及其后面的字符复制到std::string
对象。
但是,如果您随后使用将std::string
对象的内容视为C样式字符串的函数,它将显示为截断的:
#include <sstream>
#include <string>
#include <iostream>
#include <ostream>
#include <string.h>
using namespace std;
stringstream ss;
int main()
{
ss << 'a' << 'b' << 'c' << (char) '\0' << '1' << '2' << '3';
string s = ss.str();
cout << s.size() << endl;
cout << s.c_str() << " C string length: " << strlen(s.c_str()) << endl;
cout << s << endl;
}
产生以下输出:
7
abc C string length: 3
abc 123
答案 1 :(得分:3)
您的文件中似乎有空字符符号'\ 0'。这被认为是字符串的结尾。