English 中文(简体)
改变 C++ 程序中的 stdout 值
原标题:
  • 时间:2008-12-17 21:45:35
  •  标签:

我有一个Windows C++程序在做类似于:

  FILE* pf = ...;
  *stdout = *pf;    // stdout is defined in stdio.h

我正在寻找关于改变stdout文件处理器值时会发生什么的解释。这只是重定向stdout的一种方式吗?

Sorry, but "cr" has no meaning in English language. Please provide more context or information so I can assist you in translating it to Chinese.

最佳回答

如果您使用分配来更改stdout而不是使用指定的工具(如Adam Rosenfield所说的C中的freopen() - 并且通过扩展在C ++中),那么您会使自己面临各种责任。

  • It is not clear that cout will also be redirected.
  • You will likely leak a file descriptor (which may not matter).
  • You might not flush the original stdout properly - losing information.
  • You might leak memory associated with the original file pointer (which again may not matter).
  • If anything closes pf, then you are liable for double-free errors (crashes).

做事情干净利落要更好。

演示代码不一定是由供应商编码团队中技术最为经验丰富的人员编写或检查的。如果看起来可疑,那可能是因为它确实存在问题。

问题回答

是的,当您更改stdout时,实际上正在将其重定向到其他位置。 但是,您不应该像那样直接分配给stdout。 如果要重定向stdout,则应该使用freopen()。

您不应直接操作 FILE 对象 - 您应将它们视为不透明类型,并仅通过 库中的函数与它们交互。乔纳森列举了一些很好的原因。

来自C99标准,第7.19.3节,第6段:

The address of the FILE object used to control a stream may be significant; a copy of a FILE object need not serve in place of the original.





相关问题
热门标签