printf的wrapper


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

 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为参数的非可变参数的函数。
两者很不同。

你可能感兴趣的:(printf的wrapper)