14.1.6 vprintf 和它的朋友们
像 printf,fprintf 这类的函数都有特殊的版本。特殊版本接收 va_list 作为它们的最后的参数。这些特殊版本的函数以字母 v 作为前缀,例如:
int vprintf(const char *format, va_list ap);
这些自定义函数使用 va_list 来接收任意数量的参数。
列表 14-8 展示了这样的例子。
Listing 14-8.vsprintf.c
#include <stdarg.h>
#include <stdio.h>
void logmsg( int client_id, const char* const str, ... ) {
va_list args;
char buffer[1024];
char* bufptr = buffer;
va_start( args, str );
bufptr += sprintf(bufptr, "from client %d :", client_id );
vsprintf( bufptr, str, args );
fprintf( stderr, "%s", buffer );
va_end( args );
}