我正在尝试在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窗口打印:
?‹???????]
预期:正确打印日期和时间。
答案 0 :(得分:0)
我知道,迈克尔的评论已经解决了你的问题。但是,你应该知道问题的原因,以避免将来再犯同样的错误。所以,这个答案总结了这一点。
首先,一些基础知识::
A
中的W
和OutputDebugStringA
& OutputDebugStringW
分别代表Ansi
和Wide characters
。
Ansi
个字符占用1个字节的内存,如char
和Wide
个字符占用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);