I'm currently using std::ofstream
as follows:
std::ofstream outFile;
outFile.open(output_file);
Then I attempt to pass a std::stringstream
object to outFile
as follows:
GetHolesResults(..., std::ofstream &outFile){
float x = 1234;
std::stringstream ss;
ss << x << std::endl;
outFile << ss;
}
Now my outFile
contains nothing but garbage: "0012E708" repeated all over.
In GetHolesResults
I can write
outFile << "Foo" << std:endl;
and it will output correctly in outFile
.
Any suggestion on what I'm doing wrong?
You can do this, which doesn't need to create the string. It makes the output stream read out the contents of the stream on the right side (usable with any streams).
When passing a stringstream rdbuf to a stream newlines are not translated. The input text can contain
\n
so find replace won't work. The old code wrote to an fstream and switching it to a stringstream losses the endl translation.I'd rather write
ss.str();
instead ofss.rdbuf();
(and use a stringstream).If you use
ss.rdbuf()
the format-flags ofoutFile
will be reset rendering your code non-reusable. I.e., the caller ofGetHolesResults(..., std::ofstream &outFile)
might want to write something like this to display the result in a table:...and wonder why the width is ignored.
If you are using
std::ostringstream
and wondering why nothing get written withss.rdbuf()
then use.str()
function.