一、C中的格式化输出变参函数有:
int vprintf(const char *format,va_list ap); // 格式化字符串标准输出
int vfprintf(FILE *stream,const char *format,va_list ap); // 格式化输出到文件流中
int vsprintf(char *str,const char*format,va_list ap); // 格式化输出到str中并在末尾加‘\0’,str空间不够会溢出
int vsnprintf(char *str,size_t size,const char *format,va_list ap); // 格式化输出到str中并在末尾加‘\0’,str空间不够会截断输出
二、应用示例:
1、vprintf函数使用
#include <stdio.h>
#include <stdarg.h>
int my_printf(const char *format,...)
{
va_list ap;
int retval;
va_start(ap,format);
printf("my_printf():");
retval = vprintf(format,ap);
va_end(ap);
return retval;
}
int main()
{
int i=150,j=-100;
double k = 3.14159;
my_printf("%d %f %x\n",j,k,i);
my_printf("%2d %*d\n",i,2,i);
return 0;
}
运行结果:
ISmileLi@ubuntu:~/testLinuxC$ gcc test_vprintf.c -o test_vprintf
ISmileLi@ubuntu:~/testLinuxC$ ./test_vprintf
my_printf():-100 3.141590 96
my_printf():150 150
2、vfprintf函数使用
#include <stdio.h>
#include <stdarg.h>
int my_vfprintf(FILE *fp,const char *format,...)
{
va_list ap;
int retval;
va_start(ap,format);
printf("my_vfprintf():have writed datas success!\n");
retval = vfprintf(fp,format,ap);
va_end(ap);
return retval;
}
int main()
{
int i=150,j=-100;
double k = 3.14159;
FILE *fp;
fp = fopen("testvfprintf.txt","wb+");
my_vfprintf(fp,"this is a test of vfprintf:%d %f %x\n",j,k,i);
return 0;
}
运行结果:
ISmileLi@ubuntu:~/testLinuxC$ gcc test_vfprintf.c -o test_vfprintf
ISmileLi@ubuntu:~/testLinuxC$ ./test_vfprintf
my_vfprintf():have writed datas success!
ISmileLi@ubuntu:~/testLinuxC$