在以往控制台程序里,可以在程序中插入printf来显示程序运行状态信息,但是,在VS2010开发win32程序时printf不知道被输出到哪里去了,很不方便。
今天对这个问题进行了一些搜索,结合以下内容,形成一套解决方案。
_myprintf函数可以实现像调用printf一样,输出调试信息,输出的信息在VS的”输出“窗口中显示,支持%d %f %s三种格式,最长输出信息不能超过1024, 应该可以满足调试需求了。
1 bool _myprintf(char *fmt, ...)
2 {
3 char buf[1024]={0};
4 va_list ap;
5 int ival;
6 double dval;
7 char *sval;
8
9 va_start(ap,fmt);
10 for(char *p = fmt, *pbuf=buf; *p; p++)
11 {
12 if(*p!='%') //如果不是占位符,就按照字面值输出
13 {
14 *pbuf++ = *p;
15 continue;
16 }
17 switch(*++p)
18 {
19 case 'd':
20 ival=va_arg(ap,int);
21 sprintf(pbuf, "%d",ival);
22 pbuf += strlen(pbuf);
23 break;
24
25 case 'f':
26 dval = va_arg(ap, double);
27 sprintf(pbuf, "%f", dval);
28 pbuf += strlen(pbuf);
29 break;
30 case 's':
31 for(sval = va_arg(ap, char*); *sval; sval++)
32 {
33 *pbuf++ = *sval;
34 }
35 break;
36 default:
37 *pbuf++ = *p;
38 break;
39 }
40 }
41
42 WCHAR wsz[1024];
43 swprintf(wsz, L"%S", buf);
44 OutputDebugString(wsz);
45
46 return true;
47 }