如何将istream变量打印到标准输出.[编辑]我正在尝试调试我需要将istream输出到日志文件的场景
你输出了istream的streambuf.
例如,要将ifstream输出到cout:
std::ifstream f("whatever"); std::cout << f.rdbuf();
编辑:我假设您要复制流的全部内容,而不仅仅是单个值.如果您只想阅读一个单词,请检查1800的答案.
显而易见的解决方案是一次循环复制一个单词,但你可以做得更简单,作为一个很好的oneliner:
#include#include ... std::istream i; std::copy(std::istream_iterator (i), std::istream_iterator (), std::ostream_iterator (std::cout));
stream_iterators在内部使用operator <<和>>,这意味着它们将忽略空格.如果你想要一个精确的副本,你可以使用std :: istreambuf_iterator和std :: ostreambuf_iterator.它们处理底层(未格式化)的流缓冲区,因此它们不会跳过空格或转换换行符或任何内容.
您也可以使用:
i >> std::noskipws;
防止空白消失.但请注意,如果您的流是二进制文件,则其他一些字符可能被>>
和<<
运算符破坏.
这将打印整个流,一次1个字符:
char c; c = my_istream.get(); while (my_istream) { std::cout << c; c = my_istream.get(); }
这将打印整个内容,但丢弃空白:
std::string output; while(my_istream >> output) std::cout << output;