小明思考

高性能服务器端计算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

printf的wrapper

Posted on 2007-10-12 14:13 小明 阅读(2955) 评论(0)  编辑 收藏 引用 所属分类: C/C++

有个朋友问到我为什么下面的代码会打印出来乱码

 1 #include <stdio.h>
 2 #include <stdarg.h>
 3 
 4 void myprint(char* format, )
 5 {    
 6     va_list mark;    
 7     va_start(mark, format);    
 8     printf(format, mark); //应该被替换成vprintf
 9     va_end(mark);
10 }
11 int main()
12 {
13     myprint("hello %s\n","abcd");
14     return 0;
15 }
16 

问题就出现在第8行的printf的使用上,这里实际上应该使用vprintf

printf和vprintf的定义:

int printf( const char *format ,... );
int vprintf(   const char* format, va_list argptr);

可以看出printf是接受可变参数的函数,而vprintf是一个接受一个va_list为参数的非可变参数的函数。
两者很不同。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理