簡體   English   中英

為什么stringstream :: str()截斷字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM