字符串流输出的原因

Reason for this output of stringstream?

本文关键字:输出 字符串      更新时间:2023-10-16

我正在尝试学习字符串流,我有以下代码:

#include <iostream>
#include <sstream>
using namespace std;
int main()
{
    stringstream os;
    os.str("Purohit");
    os << "Vipul" << endl;
    cout << os.str() << endl;
}

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

Vipul
t

为什么?这不应该输出普罗希特维普尔吗?

这是因为str方法替换了stringstresm的内容,而没有将后续写入的缓冲区指针放在流的末尾。这就是为什么当你输出"Vipuln"时,它会写下你之前放入流中的"Purohit"字符串:

初始状态

0 1 2 3 4 5 6
P u r o h i t
^

<<后写:

0 1 2 3 4 5  6
V i p u l n t    

在追加"Vipul"字符串之前,可以调用 seekg 来设置位置,但更简单的解决方法是对两次写入都使用 <<