我正在尝试学习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?
答案 0 :(得分:7)
这是因为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"
来设置位置,但更简单的解决方法是使用<<
进行两次写入。