19

在 MSVC 2005 上,我有以下代码。

std::ostringstream stream("initial string ");
stream << 5;
std::cout << stream.str();

我期望的是:

initial string 5

我得到的是:

5nitial string

用字符串初始化流,我希望流将其位置移动到初始字符串的末尾。显然,STL 不同意我的看法(不是第一次)。

这种行为的目的是什么?这个用例对任何事情都有用吗?另外,有没有办法将流位置推进到初始字符串的末尾?

4

3 回答 3

23

使用ostringstream并提供初始值就像打开现有文件进行写入一样。您在那里有一些数据,除非您另有说明,否则您的初始位置将位于数据的开头。您可以在数据中查找,或者指定ios::ate将写指针初始定位到现有数据的末尾,或者您可以指定ios::app始终将写指针定位到现有数据的末尾。

于 2010-10-01T15:25:49.733 回答
18

您可以指定构造函数的第二个(可选)参数以在末尾设置流光标:

std::ostringstream stream("initial string ", std::ios::ate);
于 2010-10-01T15:21:26.353 回答
4

要寻求结束,请执行以下操作:

stream.seekp(0, ios_base::end);

至于为什么写位置默认在前面,我不知道。

于 2010-10-01T15:19:57.880 回答