在MSVC 2005上,我有以下代码。
std::ostringstream stream("initial string ");
stream << 5;
std::cout << stream.str();
我的期望是:
initial string 5
我得到的是:
5nitial string
使用字符串初始化流,我希望流将其位置移动到初始字符串的末尾。显然,STL不同意我的意见(不是第一次)。
这种行为的目的是什么?这个用例对任何事情都有用吗?另外,有没有办法将流位置提升到初始字符串的末尾?
答案 0 :(得分:19)
使用ostringstream
并提供初始值就像打开现有文件进行编写一样。您有一些数据,除非另有说明,否则您的初始位置将位于数据的开头。您可以在数据中查找,或者指定ios::ate
以将写指针初始定位到现有数据的末尾,或者您可以指定ios::app
以始终将写指针定位到现有数据的末尾数据
答案 1 :(得分:15)
您可以指定构造函数的第二个(可选)参数,以便在末尾设置流游标:
std::ostringstream stream("initial string ", std::ios::ate);
答案 2 :(得分:4)
为了寻求结束,请执行以下操作:
stream.seekp(0, ios_base::end);
至于为什么写位置默认为前面,我不知道。