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. windows下安装以及配置nginx
  2. SVM学习(一):SVM概念
  3. java cloneable 用途_java中cloneable的使用
  4. SAP ABAP Netweaver系统的传输请求类型和原始系统的含义
  5. 带Prometheus的Spring Boot和测微表第4部分:基础项目
  6. SQLServer之创建非聚集索引 1
  7. easyexcel设置下拉选项不能覆盖_Wi-Fi经常掉线 这个设置要修改
  8. c++ 类的sizeof
  9. CentOS7安装VirtualBox后系统起不来了:版本和vbox兼容很重要吧,不然VirtualBox起不来。
  10. HCIE Security 常见WEB攻击 备考笔记(幕布)
  11. pythonindex函数的使用格式_Python正课31 —— 函数参数的使用
  12. 统计学基础知识梳理,看这一篇就够了
  13. VS2008 SP1开发环境补丁列表
  14. 【JAVA程序设计】(C00075)基于SSM的网上汽车租赁管理系统
  15. 理财就是理生活 —— 小白理财训练营(下)
  16. Qt之鼠标滑过控件由箭头变成手型
  17. iOS 支持webrtc的浏览器 bowser
  18. 程序员吐槽_程序员在地铁上写代码被路人吐槽:有什么好装的!网友评论炸锅了!...
  19. Win10:解决Win10的录音设备只能录制系统内部声音无法录制麦克风声音的问题
  20. 概率论与数理统计知识

热门文章

  1. CPT205-Computer Graphics(2)
  2. OpenCV4、C++:未定义标识符 “CV_RGB2GRAY“ 的解决方案
  3. 【python中break、continue 、pass终止循环的区别】
  4. 淘宝店铺运营经验分享,有哪些因素会影响到宝贝的转换率,怎么做才能提高转化
  5. jakarta ee_Jakarta EE 8发布@ Eclipse Foundation
  6. 【Matlab语音处理】汉宁窗FIR陷波滤波器语音信号加噪去噪【含GUI源码 1711期】
  7. js 定时网页点击_学生网页作业制作网页设计成品免费下载第五期
  8. 大数据时代气象水利的精准把控
  9. Android查看手机内部储存目录及数据库文件[转]
  10. uglifyjs php,使用UglifyJS合并/压缩JavaScript