使用C在Visual Studio 2013中的输出窗口上显示当前时间

时间:2017-03-29 11:13:54

标签: c

我正在尝试在Visual Studio的输出窗口上显示当前时间。我需要它用于调试目的。由于printf()输出不打印到Visual Studio的输出窗口,我需要使用OutputDebugString()。

代码正确编译但输出无法正确显示。有人可以帮帮我吗?谢谢!

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的OUTPUT窗口打印:

?‹???????]

预期:正确打印日期和时间。

1 个答案:

答案 0 :(得分:0)

我知道,迈克尔的评论已经解决了你的问题。但是,你应该知道问题的原因,以避免将来再犯同样的错误。所以,这个答案总结了这一点。

首先,一些基础知识:: A中的WOutputDebugStringA& OutputDebugStringW分别代表AnsiWide characters

Ansi个字符占用1个字节的内存,如charWide个字符占用2个字节的内存,如wchar_t

有关详细参考,请查看此处:: Difference between char* and wchar_t*

现在,当您已将buff定义为char时,为什么要将其输入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);