Posted on 2007-10-12 14:13
小明 阅读(3007)
评论(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为参数的非可变参数的函数。
两者很不同。