使用 stringstream::str() 更新后,C++ stringstream 无法正常工作

C++ stringstream not working correctly after updated with stringstream::str()

我知道 stringstream 可以用 stringstream::str() 更新,但如果我之后在 stringstream 中输入其他内容,它不会按预期工作。以下片段演示了该现象:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;
int main()
{
    stringstream ss; //ostringstream gives the same output
    ss << "Original string ";
    ss.str("Updated string ");
    ss << "sth else";
    cout << ss.str() << endl;
}

我希望得到输出

Updated string sth else

但它实际上输出

sth elsestring

似乎不​​是在当前字符串的末尾附加新输入的字符串(在我的例子中是 Updated string),而是试图从头覆盖它。我的代码有什么问题?

Here's a live demo

您需要将 std::ios_base::app 添加到 openmode。它确保 stringstream 对象在每次写入之前都查找到流的末尾。试试这个:

stringstream ss(std::ios_base::app|std::ios_base::in|std::ios_base::out);