有没有办法将stdout设置为二进制模式?在没有任何操作的stdout模式中,从我的调试问题开始,我认为它处于文本模式,是真的吗?
我试过功能:
freopen(NULL,"wb",stdout)
但是当我这样做时,我的程序崩溃了。
答案 0 :(得分:10)
我尝试使用下面的代码将stdin和stdout设置为二进制模式(在Windows上):
#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
#endif
...
#ifdef _WIN32
setmode(fileno(stdout),O_BINARY);
setmode(fileno(stdin),O_BINARY);
#endif
在Linux下你不能这样做,因为在这个平台上二进制和文本模式是一回事。
答案 1 :(得分:0)
简单的答案是否定的。该模式是在构造iostream对象时确定的,以后不能更改。一些实现可以提供稍后执行它的手段,但是这不是标准化的。在某些实现中,在freopen
上执行stdout
可能会改变模式,虽然我认为正式地说,这在C ++中是被禁止的。 (它是在C中定义的实现。)显然,它不适用于您的实现。
最好的办法是找出你的系统如何命名控制台设备(Unix下为"/dev/tty"
;我认为是"CONS"
,在Windows下),以所需模式打开它,然后输出它。