在Windows C 中輸出控制台文字
在Windows 上執行的本機C 程式可以利用命令列介面來顯示控制台輸出。但是,如果程式的入口點定義為 WinMain,則如何查看使用 std::cout 等標準輸出函數列印的資料並不是很明顯。
解決方案:
在這種情況下,有幾種方法可以實現控制台輸出:
1.利用重定向函數:
實作自訂重定向函數,攔截標準I/O 流並將其路由到控制台。以下是使用 Win32 API 的範例:
guicon.cpp
#include <windows.h> #include <stdio.h> #include <fcntl.h> #include <io.h> #include <iostream> #include <fstream> using namespace std; void RedirectIOToConsole() { int hConHandle; long lStdHandle; FILE *fp; AllocConsole(); GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); coninfo.dwSize.Y = MAX_CONSOLE_LINES; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize); lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen(hConHandle, "w"); *stdout = *fp; setvbuf(stdout, NULL, _IONBF, 0); lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen(hConHandle, "r"); *stdin = *fp; setvbuf(stdin, NULL, _IONBF, 0); lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); fp = _fdopen(hConHandle, "w"); *stderr = *fp; setvbuf(stderr, NULL, _IONBF, 0); ios::sync_with_stdio(); }
然後,在程式中包含此函數並在使用標準輸出函數之前呼叫它。
2。將控制台輸出重新導向到檔案:
另一個選項是將控制台輸出重新導向到文件,然後可以使用文字編輯器查看該檔案。這可以透過修改程式的命令列來完成:
program.exe 1>output.txt 2>&1
在此範例中,標準輸出和標準錯誤被重定向到「output.txt」檔案。
3 。使用條件編譯:
如果您的程式專門針對開發或偵錯環境,則可以使用條件編譯僅在必要時包含控制台輸出。例如,您可以將控制台輸出語句包裝在 #ifdef _DEBUG 區塊中。
範例實作:
test.cpp
#include <iostream> #ifdef _DEBUG int main() { std::cout << "Hello, world!" << std::endl; return 0; } #endif
預設情況下,這個程式不會輸出任何內容。但是,當使用定義的 _DEBUG 預處理器巨集進行編譯時,它將列印「Hello, world!」到控制台。
以上是如何使用 WinMain 入口點在 Windows C 程式中顯示控制台輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!