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