linux C 格式化输出变参函数vprintf/vfprintf/vsprintf/vsnprintf的使用

一、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$

猜你喜欢

转载自blog.csdn.net/toby54king/article/details/80381369
今日推荐