如何将stringstream写入ofstream?代码无输出问题求助
问题原因
当你调用cout << stream.rdbuf()时,rdbuf()会将std::stringstream的读位置指针移动到流的末尾,同时触发EOF标志。后续再用p << stream.rdbuf()写入文件时,流已经处于无内容可读的状态,自然无法写入任何数据。
解决方案
提供两种可行的修复方式:
方式1:重置流的读指针与状态
在写入文件前,将流的读指针重置到起始位置,并清除EOF标志:
int main() { std::stringstream stream; stream << "Hello world"; cout << stream.rdbuf() << endl; // 正常输出 // 重置读指针到流开头,清除EOF状态 stream.seekg(0); stream.clear(); std::ofstream p{ "hi.txt" }; p << stream.rdbuf(); // 现在可正常写入内容 p.close(); std::ifstream ip{ "hi.txt" }; std::string s; ip >> s; cout << s; // 输出 Hello ip.close(); // 原代码错误关闭了p,此处应关闭读取流ip return 0; }
方式2:直接获取字符串内容操作
通过str()方法获取std::stringstream的完整内容,避免操作流指针导致的问题:
int main() { std::stringstream stream; stream << "Hello world"; cout << stream.str() << endl; // 用str()获取内容,不影响流状态 std::ofstream p{ "hi.txt" }; p << stream.str(); // 直接写入字符串内容 p.close(); std::ifstream ip{ "hi.txt" }; std::string s; ip >> s; cout << s; ip.close(); return 0; }
内容的提问来源于stack exchange,提问作者lorem1213
相关产品推荐
相关产品推荐

