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

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

int main()
{
    stringstream os;
    os.str("Purohit");
    os << "Vipul" << endl;
    cout << os.str() << endl;
}

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

为什么?这个输出不应该是Purohit Vipul吗?

最佳答案

这是因为str方法替换了stringstresm的内容,而没有将用于后续写入的缓冲区指针放在流的末尾。这就是为什么当您输出"Vipul\n"时,它会覆盖您之前放入流中的"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

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

10-08 11:51