stringstream输出的原因是什么?

use*_*407 3 c++ stringstream

我正在尝试学习stringstream,我有以下代码:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    stringstream os;
    os.str("Purohit");
    os << "Vipul" << endl;
    cout << os.str() << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它时,我得到以下输出:

Vipul
t
Run Code Online (Sandbox Code Playgroud)

为什么?不应该输出Purohit Vipul?

das*_*ght 7

这是因为str方法替换了内容stringstresm,而没有在流的末尾放置用于后续写入的缓冲区指针.这就是为什么当你输出"Vipul\n"它时会先写入"Purohit"你放入流中的字符串:

初始状态

0 1 2 3 4 5 6
P u r o h i t
^
Run Code Online (Sandbox Code Playgroud)

<<写:

0 1 2 3 4 5  6
V i p u l \n t    
Run Code Online (Sandbox Code Playgroud)

您可以seekg在附加"Vipul"字符串之前调用设置位置,但更容易修复将<<用于两次写入.