博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vprintf 和 vsnpintf 的用法
阅读量:4495 次
发布时间:2019-06-08

本文共 1539 字,大约阅读时间需要 5 分钟。

函数定义:

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;

}

转载于:https://www.cnblogs.com/jiu0821/p/8810095.html

你可能感兴趣的文章
小程序开发快速入门教程(附源码)
查看>>
基于cropper.js的图片上传和裁剪
查看>>
车联网SaaS平台多租户平台技术选型参考
查看>>
我是如何快速积累工作经验
查看>>
用信号量进程同步与互斥
查看>>
随笔1
查看>>
Codeforces Round #469 (Div. 2)
查看>>
JavaScript:Number 对象
查看>>
事务同步多线程
查看>>
怎么去掉联系人、通话记录、拨号列表界面中的电话号码中间的空格?
查看>>
node.js常见的一些错误信息
查看>>
MySQL启动出现The server quit without updating PID file错误解决办法
查看>>
什么是多租户
查看>>
jQuery的效果
查看>>
express node 框架介绍
查看>>
adt-bundle-windows-x86-20131030
查看>>
Socket
查看>>
正则表达式之 数据验证 与 文本替换
查看>>
RPC是什么?
查看>>
CLR via C#:CLR的执行模型
查看>>