Posted on 2007-10-12 14:13
小明 閱讀(3040)
評論(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為參數的非可變參數的函數。
兩者很不同。