none
MFC(VS2015 Community)中的Console printf RRS feed

  • 问题

  • 在MFC开发中,我比较习惯使用Console输出调试信息来进行DEBUG。从VS2008到VS2012,只要在初始化时候打开Console,那么printf的输出会被定向到Console中,十分快捷,示例代码如下:

    static inline void InitConsoleWindow()
    {
      int nCrt = 0;
      FILE* fp;
      AllocConsole();
      nCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
      fp = _fdopen(nCrt, "w");
      *stdout = *fp;
      setvbuf(stdout, NULL, _IONBF, 0);
    }

    在初始化函数中调用上述函数后,再使用printf即可在Console中输出调试信息。而在我升级Visual Studio 2015后,发现printf(或是cout)无法输出到console。

    解决方法是包含 conio.h 头文件,用 _cprintf 代替 printf 和 cout。但我很想知道,Visual Studio 2015中的 printf 被 retarget 到哪儿了……

    2016年2月19日 12:25

全部回复

  • 求大神详细解答一下!
    2016年2月21日 10:10
  • 你好:

    >>,只要在初始化时候打开Console,那么printf的输出会被定向到Console中。

    Printf输出的内容是到标准输出然后到控制台,标准输出(stdout)可以被重定向;但是cprintf是直接把内容输出到控制台,不允许重定向,数据可靠性又得以提高,这也就是为什么VS2015使用cprintf的原因。

    希望我的回复能帮助你理解。

    2016年2月22日 6:26
    版主
  • 谢谢Hart的回答!

    那么,如果我要使用 std::cout 或者 printf ,如何将其输出重定向到 Console 呢?

    Visual Studio 2012,只要初始化时打开Console,printf的stdout输出就会直接在Console中显示。

    如果要在Visual Studio 2015中实现,需要如何去做呢??

    2016年2月22日 7:08