vsnprintf和snprintf是C语言printf家族函数的成员,相关函数列表如下:

#include <stdio.h>int printf(const char *format, ...); //输出到标准输出int fprintf(FILE *stream, const char *format, ...); //输出到文件int sprintf(char *str, const char *format, ...); //输出到字符串str中int snprintf(char *str, size_t size, const char *format, ...); //按size大小输出到字符串str中以下函数功能与上面的一一对应相同,只是在函数调用时,把上面的...对应的一个个变量用va_list调用所替代。在函数调用前ap要通过va_start()宏来动态获取。
#include <stdarg.h>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);int vsnprintf(char *str, size_t size, const char *format, va_list ap);

可变参数列表va_list宏说明:

void va_start(va_list ap, last);
void va_end(va_list ap);

  1. va_start与va_end是成对被调用的,
  2. 开始的时候被调用va_start,获得各输出变量地址
  3. 结束的时候被调用va_end,释放相应的资源

例,通过vsnprintf()实现snprintf()功能:(更多详情可参阅linux man va_start手册)

#include <stdio.h>
#include <stdarg.h>
int my_snprintf(char *s, int size, const char *fmt, ...) //该自定义函数,与系统提供的snprintf()函数相同。
{va_list ap;int n=0;va_start(ap, fmt); //获得可变参数列表n=vsnprintf (s, size, fmt, ap); //写入字符串sva_end(ap); //释放资源return n; //返回写入的字符个数
}
int main() {char str[1024];my_snprintf( str, sizeof(str), "%d,%d,%d,%d",5,6,7,8);printf("%s\n",str);return 0;
}

【转自:http://zhidao.baidu.com/link?url=jJyG-Es6BmRy8k7DK9dTDAFZCdTQjc2EqYjPDa6A5fERSmoH_a-Jzl9QAfhSe73rxB26fMo9beubS3gRxhZud0D3mrykfGjRgrpoYWEVIzy】

vsnprintf和snprintf相关推荐

  1. C中snprintf与vsnprintf函数

    博客搬家,原地址:https://langzi989.github.io/2018/01/01/C中snprintf与vsnprintf函数/ 虽然snprintf函数在开发过程中比较常用,但是其中有 ...

  2. linux C 可变参数配合vsnprintf的使用

    可变参数简介 大多时候开发时函数入参数量是确定的,但在特定情况下会有可变数量参数的需求. 在C语言中提供了一个解决方案,需要引用头文件 :#include <stdarg.h> 一.函数接 ...

  3. 关于va_start

    va_start宏 va_list 解决的问题 c中的变参? stdarg.h头文件几个重要的宏 含义 使用例子 关于vsnprintf 偶然间按触到了va_list,这到底是个什么东西呢?好奇. v ...

  4. 基于VS2015编译Yate

    基于VS2015编译Yate 1前言 之前使用vs2010对yate的学习,随着vs的升级和更新,我们将使用vs2015继续对Yate进行学习.本文记载基于vs2015编译Yate的一些问题. 2问题 ...

  5. 各种输出函数的比较(printf/fprintf/sprintf/snprintf/vprintf/vfprintf/vsprintf/vsnprintf)

    对于程序猿来说,printf函数可以说是最熟悉的一个工具了.利用它可以将各类调试信息输出到指定的设备(比如串口)中,实现对程序运行状态的掌控和分析.不过,在实际的应用中,相信大家除了printf函数之 ...

  6. sprintf、vsprintf、sprintf_s、vsprintf_s、_snprintf、_vsnprintf、snprintf、vsnprintf 函数辨析

    看了题目中的几个函数名是不是有点头晕?为了防止以后总在这样的细节里纠缠不清,今天我们就来好好地辨析一下这几个函数的异同. 实验环境: Windows下使用VS2017 Linux下使用gcc4.9.4 ...

  7. C语言:跨平台环境下使用snprintf,vsnprintf系列函数要注意返回值的问题

    标准C语言函数snprintf,vsnprintf系列函数可以向指定的缓冲区输出格式化打印的字符串. 如果指定的缓存区足够大,那么调用正常,返回值就是写入缓存区的字节长度(不含结尾'\0') 那么缓存 ...

  8. snprintf 与 vsnprintf

    这俩函数乃是 sprintf 与 vsprintf 的安全版本,因为是安全函数,于是想当然的使用.直到最近遇到的一个日志组件bug,调试了许久才发现原来是在使用这俩函数时,对溢出情况下,返回值的错误处 ...

  9. c语言打印字符的函数参数,C语言格式化打印函数vsnprintf()的实现

    Linux内核的格式化打印函数是printk(),它与printf()函数是类似的,都是根据格式字符串把可变参数列表转化成字符序列,然后输出到控制台. printf()是打印到标准输出stdout. ...

最新文章

  1. C#中Base64之编码,解码方法
  2. python numpy模块
  3. Hadoop教程(四):理解MapReduce、MapReduce计数器和连接、MapReduce Hadoop程序连接数据
  4. SQL Server数据库中批量导入数据的四种方法总结
  5. select into from 用法_年轻同事不讲武德,直接怼上MySQL常见SQL的七大错误用法
  6. 电力系统潮流计算matlab程序,大神们,求个电力系统潮流计算的matlab程序。
  7. oracle sequence 不同 会话 不连续_序列 Sequence
  8. win10安装visio2010出错_win7安装Office Visio 2010时出现错误怎么办
  9. 北航计算机组成原理课程设计-2020秋 PreProject-Logisim-Logisim仿真与调试应用与挑战
  10. IE插件在注册表中的相关位置
  11. 高考成绩真的可以改了?
  12. 国外的一个网站不能够访问
  13. JVM -- JVM内存结构:程序计数器、虚拟机栈、本地方法栈、堆、方法区(二)
  14. JavaScript之减速运动的实现
  15. 基于RSA+AES 软件授权License
  16. 大数据分析案例-基于决策树算法构建金融反欺诈分类模型
  17. [几何画板]正十七边形的做法
  18. PowerBI视觉对象共计271组,2021.01.20日更新
  19. IMSI,TMSI,MSISDN, MSRN 和 IMEI
  20. 2014年计算机专业考研大纲,2014计算机考研大纲全面解析

热门文章

  1. appstore苹果商店支付对接总结
  2. 6款职场发型,造就你的气质不凡!
  3. 三折页设计尺寸的制作要素宣传册平面印刷
  4. 详解Vue响应式原理
  5. Java包的定义与命名规则
  6. 有视力的UR机器人提高了座椅制造生产率
  7. 机器学习之SVM(算法详细推导)
  8. STM32 F4 OV2640摄像头学习笔记(三)
  9. 谷歌,IBM ,微软:2019年量子计算驱动区块链加速落地
  10. POI报表之生成excel