vprintf 和 vsnpintf 的用法

Posted jiu__

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vprintf 和 vsnpintf 的用法相关的知识,希望对你有一定的参考价值。

函数定义:


int vprintf ( const char * format, va_list arg );

 

printf() and friends are for normal use. vprintf() and friends are for when you want to write your own printf()-like function. Say you want to write a function to print errors:

标准库函数vprintf函数与printf函数类似,所不同的是,它用一个参数取代了变长参数表,且此参数通过调用va_start宏进行初始化。同样,vfprintf和vsprintf函数分别与fprintf和sprintf函数类似。


程序例:
#include   <stdio.h>        
#include   <stdarg.h>        
int vpf(char *fmt, ...)
{
  va_list argptr;
  int cnt;
  va_start(argptr, fmt);
  cnt = vprintf(fmt, argptr);
  va_end(argptr);
  return(cnt);
}
int main(void)
{
  int inumber = 30;
  float fnumber = 90.0;
  char *string = "abc";
  vpf("%d %f %s\n",inumber,fnumber,string);
  return 0;
}
 

va_list原理解释:

VA_LIST 是在C语言中解决变参问题的一组宏,在<stdarg.h>头文件下。

VA_LIST的用法:     
      (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针
      (2)然后用VA_START宏初始化变量刚定义的VA_LIST变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。
      (3)然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型。
      (4)最后用VA_END宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了。如果函数有多个可变参数的,依次调用VA_ARG获取各个参数。

 

下面是vsnprintf 的一个例子:

va_list ap; //声明一个变量来转换参数列表  
va_start(ap,fmt);          //初始化变量  
va_end(ap);     //结束变量列表,和va_start成对使用  
可以根据va_arg(ap,type)取出参数 

 

已经经过调试成功的输出程序

#include<stdio.h>
#include <stdarg.h>

#define bufsize 80
char buffer[bufsize];

int vspf(char *fmt, ...)
{
  va_list argptr;
  int cnt;
  va_start(argptr, fmt);

  cnt = vsnprintf(buffer,bufsize ,fmt, argptr);

  va_end(argptr);

  return(cnt);
}

int main(void)
{
  int inumber = 30;

  float fnumber = 90.0;

  char string[4] = "abc";

  vspf("%d %f %s", inumber, fnumber, string);

  printf("%s\n", buffer);

 

return 0;
}

以上是关于vprintf 和 vsnpintf 的用法的主要内容,如果未能解决你的问题,请参考以下文章

C语言 vprintf 函数

109.vprintf vfprintf vscanf vfscanf

printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换

C:_debug_printf,基于vsnprintf 或 vprintf实现带时间戳和源码信息(__FILE__,__FUNCTION__, __LINE__)的格式化打印输出

如何在Qt Creator 创建一个.pri文件

python %r %s %d 用法和区别