[英]Why doesn't `std::stringstream::stringstream(std::string&&)` exist?
[英]Why stringstream::str() truncates string?
我有stringstream對象。 它通過
stringstream ss;
boost::iostreams::copy(inp,ss);
從
boost::iostreams::filtering_streambuf<boost::iostreams::input> inp;
並實際上保存未壓縮的文件。
現在如果我將stringstream內容沖洗到文件中
std::ofstream ofs(path_to_file,std::ios_base::out|std::ios_base::binary);
ofs << ss.rdbuf();
一切都好。 文件中填充了完整正確的數據。
但是如果我不是像這樣沖洗文件構造字符串
std::string s = ss.str();
內容在中間某處被截斷。 這不是一個持久錯誤,並且顯然取決於字符串緩沖區的內容。
內容是幾種語言的HTML文件。
會是什么 謝謝。
您如何確定內容被截斷? 甲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
您的文件中似乎有空字符符號“ \\ 0”。 那被認為是字符串的結尾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.