Posted on 2007-10-12 14:13
小明 閱讀(3041)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
C/C++
有個(gè)朋友問(wèn)到我為什么下面的代碼會(huì)打印出來(lái)亂碼
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); //應(yīng)該被替換成vprintf
9 va_end(mark);
10 }
11 int main()
12 {
13 myprint("hello %s\n","abcd");
14 return 0;
15 }
16
問(wèn)題就出現(xiàn)在第8行的printf的使用上,這里實(shí)際上應(yīng)該使用vprintf
printf和vprintf的定義:
int printf( const char *
format ,
... );
int vprintf( const char*
format, va_list
argptr);
可以看出printf是接受可變參數(shù)的函數(shù),而vprintf是一個(gè)接受一個(gè)va_list為參數(shù)的非可變參數(shù)的函數(shù)。
兩者很不同。