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