63

我目前使用std::ofstream如下:

std::ofstream outFile;
outFile.open(output_file);

然后我尝试将std::stringstream对象传递给outFile如下:

GetHolesResults(..., std::ofstream &outFile){
  float x = 1234;
  std::stringstream ss;
  ss << x << std::endl;
  outFile << ss;
}

现在我outFile只包含垃圾:“0012E708”到处重复。

GetHolesResults我可以写

outFile << "Foo" << std:endl; 

它将正确输出outFile

关于我做错了什么有什么建议吗?

4

4 回答 4

107

您可以这样做,而无需创建字符串。它使输出流在右侧读出流的内容(可用于任何流)。

outFile << ss.rdbuf();
于 2008-11-28T02:25:21.273 回答
23

如果您正在使用std::ostringstream并且想知道为什么什么都没有写,ss.rdbuf()那么使用.str()函数。

outFile << oStream.str();
于 2015-03-16T06:00:43.510 回答
4

将 stringstream rdbuf 传递给流时,不会翻译换行符。输入文本可以包含\n因此查找替换不起作用。旧代码写入 fstream 并将其切换到 stringstream 会丢失 endl 转换。

于 2012-12-07T09:26:23.507 回答
2

我宁愿写ss.str();而不是ss.rdbuf();(并使用字符串流)。

如果您使用ss.rdbuf()的格式标志outFile将被重置,从而使您的代码不可重用。即,调用者GetHolesResults(..., std::ofstream &outFile)可能想要写这样的东西来在表格中显示结果:

outFile << std::setw(12) << GetHolesResults ...

...并想知道为什么忽略宽度。

于 2018-12-14T01:08:25.410 回答