vsnprintf和snprintf
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);
- va_start与va_end是成对被调用的,
- 开始的时候被调用va_start,获得各输出变量地址
- 结束的时候被调用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相关推荐
- C中snprintf与vsnprintf函数
博客搬家,原地址:https://langzi989.github.io/2018/01/01/C中snprintf与vsnprintf函数/ 虽然snprintf函数在开发过程中比较常用,但是其中有 ...
- linux C 可变参数配合vsnprintf的使用
可变参数简介 大多时候开发时函数入参数量是确定的,但在特定情况下会有可变数量参数的需求. 在C语言中提供了一个解决方案,需要引用头文件 :#include <stdarg.h> 一.函数接 ...
- 关于va_start
va_start宏 va_list 解决的问题 c中的变参? stdarg.h头文件几个重要的宏 含义 使用例子 关于vsnprintf 偶然间按触到了va_list,这到底是个什么东西呢?好奇. v ...
- 基于VS2015编译Yate
基于VS2015编译Yate 1前言 之前使用vs2010对yate的学习,随着vs的升级和更新,我们将使用vs2015继续对Yate进行学习.本文记载基于vs2015编译Yate的一些问题. 2问题 ...
- 各种输出函数的比较(printf/fprintf/sprintf/snprintf/vprintf/vfprintf/vsprintf/vsnprintf)
对于程序猿来说,printf函数可以说是最熟悉的一个工具了.利用它可以将各类调试信息输出到指定的设备(比如串口)中,实现对程序运行状态的掌控和分析.不过,在实际的应用中,相信大家除了printf函数之 ...
- sprintf、vsprintf、sprintf_s、vsprintf_s、_snprintf、_vsnprintf、snprintf、vsnprintf 函数辨析
看了题目中的几个函数名是不是有点头晕?为了防止以后总在这样的细节里纠缠不清,今天我们就来好好地辨析一下这几个函数的异同. 实验环境: Windows下使用VS2017 Linux下使用gcc4.9.4 ...
- C语言:跨平台环境下使用snprintf,vsnprintf系列函数要注意返回值的问题
标准C语言函数snprintf,vsnprintf系列函数可以向指定的缓冲区输出格式化打印的字符串. 如果指定的缓存区足够大,那么调用正常,返回值就是写入缓存区的字节长度(不含结尾'\0') 那么缓存 ...
- snprintf 与 vsnprintf
这俩函数乃是 sprintf 与 vsprintf 的安全版本,因为是安全函数,于是想当然的使用.直到最近遇到的一个日志组件bug,调试了许久才发现原来是在使用这俩函数时,对溢出情况下,返回值的错误处 ...
- c语言打印字符的函数参数,C语言格式化打印函数vsnprintf()的实现
Linux内核的格式化打印函数是printk(),它与printf()函数是类似的,都是根据格式字符串把可变参数列表转化成字符序列,然后输出到控制台. printf()是打印到标准输出stdout. ...
最新文章
- windows下安装以及配置nginx
- SVM学习(一):SVM概念
- java cloneable 用途_java中cloneable的使用
- SAP ABAP Netweaver系统的传输请求类型和原始系统的含义
- 带Prometheus的Spring Boot和测微表第4部分:基础项目
- SQLServer之创建非聚集索引 1
- easyexcel设置下拉选项不能覆盖_Wi-Fi经常掉线 这个设置要修改
- c++ 类的sizeof
- CentOS7安装VirtualBox后系统起不来了:版本和vbox兼容很重要吧,不然VirtualBox起不来。
- HCIE Security 常见WEB攻击 备考笔记(幕布)
- pythonindex函数的使用格式_Python正课31 —— 函数参数的使用
- 统计学基础知识梳理,看这一篇就够了
- VS2008 SP1开发环境补丁列表
- 【JAVA程序设计】(C00075)基于SSM的网上汽车租赁管理系统
- 理财就是理生活 —— 小白理财训练营(下)
- Qt之鼠标滑过控件由箭头变成手型
- iOS 支持webrtc的浏览器 bowser
- 程序员吐槽_程序员在地铁上写代码被路人吐槽:有什么好装的!网友评论炸锅了!...
- Win10:解决Win10的录音设备只能录制系统内部声音无法录制麦克风声音的问题
- 概率论与数理统计知识
热门文章
- CPT205-Computer Graphics(2)
- OpenCV4、C++:未定义标识符 “CV_RGB2GRAY“ 的解决方案
- 【python中break、continue 、pass终止循环的区别】
- 淘宝店铺运营经验分享,有哪些因素会影响到宝贝的转换率,怎么做才能提高转化
- jakarta ee_Jakarta EE 8发布@ Eclipse Foundation
- 【Matlab语音处理】汉宁窗FIR陷波滤波器语音信号加噪去噪【含GUI源码 1711期】
- js 定时网页点击_学生网页作业制作网页设计成品免费下载第五期
- 大数据时代气象水利的精准把控
- Android查看手机内部储存目录及数据库文件[转]
- uglifyjs php,使用UglifyJS合并/压缩JavaScript