2017-03-29 27 views
1

Visual Studioの出力ウィンドウに現在の時刻を表示しようとしています。私はデバッグ目的のためにそれが必要です。 printf()の出力はVisual Studioの出力ウィンドウに出力されないので、OutputDebugString()を使用する必要があります。Cを使用してVisual Studio 2013の出力ウィンドウに現在時刻を表示

コードは正しくコンパイルされますが、出力は正しく出力されません。誰かがここで私を助けることができますか?ありがとう!

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)); 

のVisual Studio印刷物の出力ウィンドウ:予想

?‹???????] 

:日付と時刻が正しく印刷されます。

+0

ではなく 'OutputDebugString'のOutputDebugStringA''試してみて、それが動作するかどうここに報告します。 –

+0

ありがとう...それは動作します.. – Sunny

答えて

0

マイケルからのコメントはすでにあなたの問題を解決しました。しかし、今後も同じミスを繰り返さないように、問題の原因を知る必要があります。だから、この答えはそれを要約しています。すべての

まず、いくつかの基本:: AWOutputDebugStringW & OutputDebugStringAでは、それぞれAnsiWide charactersの略です。 charWide文字等のメモリの1つのバイトはwchar_tようなメモリの2つのバイトを取る点で最大

Ansi

文字を取ります。

複数の基準について、あなたはここで見ることができ:: Difference between char* and wchar_t*

を今、あなたはすでにcharとしてbuffを定義しているとき、あなたはLPCWSTRにそれをキャストタイプされている理由。 LPCWSTRの詳細については、次を参照してください。What does LPCWSTR stand for and how should it be handled with?

したがって、基本的にOutputDebugStringA(buff)を呼び出す必要があります。

別の解決策は、buffとして広いchar型の配列を定義し、ある、

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); 
関連する問題