【发布时间】:2013-09-22 20:09:38
【问题描述】:
我正在尝试使用经典的 RedirectIOToConsole 函数在 Windows Visual 2012、Linker/Subsystem = Windows (/SUBSYSTEM:WINDOWS) 上的输出控制台上重定向跟踪。
在 AllocConsole 之前执行 std::endl 似乎会导致显示跟踪问题。
下面是我的测试:
#include <windows.h>
#include <stdio.h>
#include <iostream>
void RedirectIOToConsole()
{
FILE *conin, *conout;
AllocConsole();
freopen_s(&conin, "conin$", "r", stdin);
freopen_s(&conout, "conout$", "w", stdout);
freopen_s(&conout, "conout$", "w", stderr);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
// std::cout << "My Trace 1"; // Uncomment this line for Test 1
// std::cout << "My Trace 1" << std::endl; // Uncomment this line for Test 2
RedirectIOToConsole();
printf( "redirected console\n");
std::cout << "My Trace 2" << std::endl;
ch = getchar();
return 0;
}
- 按原样运行 - 在控制台窗口中输出:
重定向控制台
我的踪迹 2 -> 好的
- 取消对测试 1 的注释行 - 控制台窗口中的输出:
重定向控制台
我的踪迹 2 -> 好的
- 取消对测试 2 的注释行 - 控制台窗口中的输出:
重定向控制台 -> 挪威克朗
【问题讨论】:
-
std::cout被缓冲,std::endl;刷新缓冲区。希望对您有所帮助,因为我根本不理解问题/问题。 -
您应该做的第一件事是检查您正在调用的函数中的错误。如果它们指示错误,您可能需要检查是什么错误(例如,
GetLastError代表AllocConsole或返回值freopen_s)。