2017-03-29 47 views
1

我試圖在Visual Studio的輸出窗口上顯示當前時間。我需要它來進行調試。由於printf()輸出不會打印到Visual Studio的輸出窗口,所以我需要使用OutputDebugString()。在Visual Studio 2013的輸出窗口上顯示當前時間使用C

代碼編譯正確,但輸出不正確。有人能幫助我嗎?謝謝 !的Visual Studio打印

char buff[100]; 
time_t rawtime; 
struct tm * timeinfo; 
time(&rawtime); 
timeinfo = localtime(&rawtime); 

sprintf(buff, "[%d %d %d %d:%d:%d]", timeinfo->tm_mday, timeinfo->tm_mon + 1, timeinfo->tm_year + 1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); 
OutputDebugString(LPCWSTR(buff)); 

輸出窗口:

?‹???????] 

預期:日期和時間被正確地打印。

+0

嘗試'OutputDebugStringA'代替OutputDebugString'這裏報告的'如果它工作或沒有。 –

+0

謝謝......它的工作原理.. – Sunny

回答

0

我知道,來自Michael的評論已經解決了您的問題。但是,您應該知道問題的原因,以避免將來再次犯同樣的錯誤。所以,這個答案總結了這一點。

首先,一些基本:: AWOutputDebugStringA & OutputDebugStringW,分別代表AnsiWide characters

Ansi字符,最多需要像charWide字符佔用2個字節的存儲器等wchar_t 1個字節的存儲器。

更多的參考,你可以看看這裏:: Difference between char* and wchar_t*

現在,當您已經定義buffchar,那麼你爲什麼它的類型轉換到LPCWSTR。有關LPCWSTR的更多參考,請參閱:What does LPCWSTR stand for and how should it be handled with?

因此,基本上,您應該致電OutputDebugStringA(buff)

另一種方案是,定義buff寬字符數組,

wchar_t buff[100]; 
wsprintf(buff, L"[%d %d %d %d:%d:%d]", timeinfo->tm_mday, 
    timeinfo->tm_mon + 1, timeinfo->tm_year + 1900, timeinfo->tm_hour, 
    timeinfo->tm_min, timeinfo->tm_sec); 
OutputDebugStringW(buff); 
相關問題