在以往控制台程序里,可以在程序中插入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 }

 

参考:

http://blog.csdn.net/ghostcomputing/article/details/6838276

http://bbs.csdn.net/topics/30365452

posted on 2013-04-12 22:40  NKHe!!oWor!d  阅读(1817)  评论(0编辑  收藏  举报