在c++中修改basic_ostream对象的内容,或者,删除basic_ostream对象的数据内容

Modify contents of basic_ostream object in c++ or, deleting data contents of basic_ostream object

我在函数中得到一个 ostream 对象引用。它包含一个我需要修改的字符串。 我使用 rdbuf() 函数将 ostream 的内容复制到 stringstream 中。 现在我需要将更新后的字符串流(底层字符串)复制回 ostream 对象。我该怎么做?

我搜索了擦除 ostream 内容的方法,但找不到。

注意:我无法更改其他功能的实现,即我无法使用 ostringstream(我知道这可以解决我的问题)。

您可以尝试使用 ostream::seekp()streambuf::pubseekpos():

更改流中的当前位置
std::ofstream out;

out.seekp(-10, std::ios_base::cur); // move back 10 positions from current location
out.rdbuf()->pubseekpos(12); // move to position 12

请记住:

  • 如果数据的底层目标不支持查找,这可能会失败(例如,streambuf 可能实际上将数据写入套接字)
  • 如果它适用于您的特定类型的流,您必须计算位置和长度以及覆盖的数量(如果新值的长度与您要在流中替换的旧值不同) ).