我有一个Windows C++程序正在执行以下操作:
FILE* pf = ...; *stdout = *pf; // stdout is defined in stdio.h
我正在寻找一个解释,当你更改stdout文件句柄的值时会发生什么.这只是重定向标准输出的一种方式吗?
-cr
是的,当您更改stdout时,您实际上将其重定向到其他位置.但是,你应该不会直接分配到stdout这样.如果你想重定向stdout,你应该改用freopen()
.
您永远不应该直接操作FILE对象 - 您应该将它们视为不透明类型,并且只能通过
库中的函数与它们进行交互.乔纳森列举了一些很好的理由.
根据C99标准,第7.19.3节,第6段:
用于控制流的FILE对象的地址可能很重要; FILE对象的副本不需要代替原始对象.