可变参数输出(三)

Linux C关于输出函数的定义:

int printf(const char *format,…);
int vprintf(const char * format,va_list ap);
int vfprintf(FILE *stream,cosnt char *format,va_list ap);
int vsprintf(char *str,const char *format,va_list ap);
int vsnprintf(char *str,size_t size,const char*format,va_list ap);

 

va_list ap; //首先定义了一个va_list类型的变量

void va_start(va_list ap, last); //va_start的第一个参数va_list变量,第二个参数为函数的最后一个固定参数

void va_end(va_list ap); //用va_end结束迭代

type va_arg(va_list ap,type);

 

使用int_vsnprintf(char* str,size_t size,const char * format,va_list ap); 函数进行格式转化输出不定参数函数。

vsnprintf()是c语言库函数之一,属于可变参数,用于向字符串打印数据以及数据格式和用户自定义等。

 

头文件:#include<stdio.h>

函数声明:int_vsnprintf(char* str,size_t size,const char *format,va_list ap);

参数说明:

char* str [out]:把生成的格式化的字符串存放在这里。

size_t size [in]: str可接受的最大字节数防止产生数组越界。

const char *format: [in] 指定输出格式的字符串,它决定了你需要提供的可变参数的类型,个数顺序。

va_list ap [in] ,va_list变量,va:variable-argument:可变参数。(就是…里所包含的内容存放到这个变参数的变量当中去);

 

变长数据的读取方式

va_start(args,fmt);
size_t buf_len = vsnprintf(buffer,MAX_LOG_LEN,str_format,args);
va_len(args);

可变参数实例:

/***
vsnprintf.c
***/
#include<stdio.h>
#include<stdarg.h>

void my_print(char *fmt,...)
{
    va_list args;
    va_start(args,fmt);
    char buff[1024];
    vsnprintf(buff,1023,fmt,args);
    printf("%s\n",buff);
    va_end(args);
}

int main()
{
    int age = 78;
    my_print("hello world");
    my_print("hello %d",2345);
    my_print("hello my age is : %d",age);
    return 0;
}

输出结果:

exbot@ubuntu:~/wangqinghe/C/20190703$ gcc vsnprintf.c -o vsnprintf

exbot@ubuntu:~/wangqinghe/C/20190703$ ./vsnprintf

hello world

hello 2345

hello my age is : 78

posted @ 2019-07-03 12:15  王清河  阅读(401)  评论(0编辑  收藏  举报