Ale*_*der 1 c++ string stringstream boost-iostreams
我有stringstream对象.它是通过填补
stringstream ss;
boost::iostreams::copy(inp,ss);
Run Code Online (Sandbox Code Playgroud)
从
boost::iostreams::filtering_streambuf<boost::iostreams::input> inp;
Run Code Online (Sandbox Code Playgroud)
并实际上保持在其中的ungzipped文件.
现在,如果我将stringstream内容刷新到文件
std::ofstream ofs(path_to_file,std::ios_base::out|std::ios_base::binary);
ofs << ss.rdbuf();
Run Code Online (Sandbox Code Playgroud)
一切都好.文件中包含完整的正确数据.
但是,如果我而不是像这样刷新文件构造字符串
std::string s = ss.str();
Run Code Online (Sandbox Code Playgroud)
内容在中间某处被截断.它不是持久性错误,它显然取决于字符串缓冲区的内容.
内容是几种语言的HTML文件.
它能是什么?谢谢.
你是如何确定内容被截断的?A 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;
}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
7
abc C string length: 3
abc 123
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4327 次 |
| 最近记录: |