vsnprintf用法解析

2023-11-13

int vsnprintf (char * s, size_t n, const char * format, va_list arg );

描述:

将格式化数据从可变参数列表写入大小缓冲区
如果在printf上使用格式,则使用相同的文本组成字符串,但使用由arg标识的变量参数列表中的元素而不是附加的函数参数,

并将结果内容作为C字符串存储在s指向的缓冲区中 (以n为最大缓冲区容量来填充)。

如果结果字符串的长度超过了n-1个字符,则剩余的字符将被丢弃并且不被存储,而是被计算为函数返回的值。
在内部,函数从arg标识的列表中检索参数,就好像va_arg被使用了一样,因此arg的状态很可能被调用所改变。
在任何情况下,arg都应该在调用之前的某个时刻由va_start初始化,并且在调用之后的某个时刻,预计会由va_end释放。

参数:

s

指向存储结果C字符串的缓冲区的指针。
缓冲区应至少有n个字符的大小。

n

在缓冲区中使用的最大字节数。
生成的字符串的长度至多为n-1,为额外的终止空字符留下空间。
size_t是一个无符号整数类型。

format

包含格式字符串的C字符串,其格式字符串与printf中的格式相同

arg

标识使用va_start初始化的变量参数列表的值。
va_list是在<cstdarg>中定义的特殊类型。

返回值:

如果n足够大,则会写入的字符数,不包括终止空字符。
如果发生编码错误,则返回负数。
注意,只有当这个返回值是非负值且小于n时,字符串才被完全写入。

/* vsnprintf example */
#include <stdio.h>
#include <stdarg.h>

void PrintFError ( const char * format, ... )
{
  char buffer[256];
  va_list args;
  va_start (args, format);
  vsnprintf (buffer,256,format, args);
  perror (buffer);
  va_end (args);
}

int main ()
{
   FILE * pFile;
   char szFileName[]="myfile.txt";

   pFile = fopen (szFileName,"r");
   if (pFile == NULL)
     PrintFError ("Error opening '%s'",szFileName);
   else
   {
     // file successfully open
     fclose (pFile);
   }
   return 0;
}

在这个例子中,如果文件myfile.txt不存在,则调用perror以显示类似于以下内容的错误消息:

Error opening 'myfile.txt': No such file or directory

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vsnprintf用法解析 的相关文章

  • vue3封装请求功能

    1 一般3开发后缀为ts的是在安装脚手架选择了ts语法开发 2 一般3开发后缀还为js的是没有选择ts当然也支持后缀vue文件使用setup js后缀的支持2的封装如下链接 vue2封装请求 如下所示为ts后缀的说明 request js
  • vue使用element发送手机验证码倒计时

    发送验证码倒计时 html
  • Linux常见面试题

    题目说明 参考多处Linux总结 整理了一下 原文链接 https blog csdn net weixin 41755830 article details 80519390 https www cnblogs com zjfjava p
  • Unity3D命令行Build

    Unity3D命令行Build 本来是没想用这个命令行Build方式 可惜电脑不知道怎么的就没法可视化的Build的了 一Build就蓝屏 后面发现这个命令行Build还是一个很实用的东西 比如你可以在服务器上搞个脚本让它每天在深更半夜时帮
  • 【解决 SyntaxError: Cannot use import statement outside a module 报错问题】

    1 项目场景 在学习express框架时 使用 formidable 包进行解析表单数据 文件上传 的Node js模块时 用 import 方式进行导入 import formidable from formidable 随后 使用 np
  • java反序列化时区,Jackson使用Java 8将Elasticsearch反序列化为LocalDateTime

    我们在日期字段中填充了longinlasticsearch索引 字段映射为 Field type FieldType Date JsonFormat shape JsonFormat Shape NUMBER INT private Loc
  • STM32速成笔记—串口IAP

    本文涉及到串口通信和Flash知识 对于这部分知识不熟悉的小伙伴可以到博主STM32速成笔记专栏查看 文章目录 一 串口IAP简介 1 1 什么是IAP 1 2 STM32下载程序 二 串口IAP有什么作用 三 启动流程 3 1 正常启动流
  • VirtualBox下设置共享文件夹并自动挂载

    想在主机和VirtualBox的Ubuntu建个共享文件夹 之前一直没搞定 今晚却特别的顺利 以下是设置的步骤 1 安装VirtualBox的VBoxGuestAddition iso 在 设备 gt 安装增强功能 安装结束记得重启 以前在
  • golang实现cron定时任务

    golang实现cron定时任务 在编写爬虫的时候 需要定时抓取实时的新闻资讯 原来采用的linux的crontab 但是发现并不是很灵活 而且不能定制 所以就采用golang写了一套 发现网上的文章 有很多坑 所以整理了一套代码 下载包
  • 前端-vue中的cron表达式插件

    vue中的cron表达式插件 样例 安装 引入 参数 联系方式 git地址 https gitee com CzRger CzrVueCron 样例 安装 可通过npm的方式进行安装 npm install czr vue cron 引入
  • GDAL教程——Geotransform

    教程参考链接 非常好的学习资料 https gdal org tutorials geotransforms tut html 1 geotransform 函数 地理变换函数 地理变换是从图像坐标空间 行 列 也称为 像素 线 到地理引用
  • CSPP 数据的机器级表示

    寄存器 intel x86 64 调用寄存器与被调用寄存器 因为要保证在调用函数返回后寄存器的值恢复为未被调用之前 所以下面的例子运用pushq指令保存被调用寄存器rbx的值 函数 gcc产生的指令指示操作数的大小 寄存器的作用 rax存储
  • 华为OD机试 - 勾股数元组(Java)

    题目描述 如果3个正整数 a b c 满足a 2 b 2 c 2的关系 则称 a b c 为勾股数 著名的勾三股四弦五 为了探索勾股数的规律 我们定义如果勾股数 a b c 之间两两互质 即a与b a与c b与c之间均互质 没有公约数 则其
  • Torch安装

    安装步骤参考官网http torch ch docs getting started html 安装过程中可能遇见的问题 1 执行命令 git clone https github com torch distro git torch re

随机推荐

  • python后端学习(九)GIL、深/浅拷贝、私有化、import、封装继承多态

    GIL面试题 描述Python GIL的概念 以及它对python多线程的影响 编写一个多线程抓取网页的程序 并阐明多线程抓取程序是否可比单线程性能有提升 并解释原因 Guido的声明 http www artima com forums
  • Android微信页面缓存清理,安卓用户如何彻底清理微信大量缓存?4招让你彻底解决内存烦恼...

    原标题 安卓用户如何彻底清理微信大量缓存 4招让你彻底解决内存烦恼 作为一个64G版的安卓用户 现在隔三差五就要对手机的内存进行清理 更不用说还在用16G的你了 如果经常出现手机的提醒你的存储容量几乎已满时 你是不老是跟小编以前一样去相册里
  • (Java) 算法题:2的N次方

    题目描述 原题链接 2的N次方 对于一个整数N 512 lt N lt 1024 计算2的N次方并在屏幕显示十进制结果 输入描述 输入一个整数N 512 lt N lt 1024 输出描述 2的N次方的十进制结果 输入例子1 512 输出例
  • 实现即时通讯的几种方式

    文章目录 1 短轮询 2 长轮询 3 SSE 4 WebSocket 总结 在 Web 应用程序中 实现即时通讯是一件常见的任务 为了实现即时通讯 我们需要使用一些特殊的技术和协议来建立一个实时连接 以便实时更新数据 在本文中 我们将介绍几
  • 本地编辑shopify主题的第一种方式

    先进入Shopify商店后台 新建应用程序 填写完无关紧要的信息后 把Theme templates and theme assets权限设置为读写访问权限并保存 然后复制密码 这表示可以通过这个密码对主题进行读写修改了 然后按照命令获取主
  • k8s-(五)最全的安装教程(使用kubeadm在Centos7上部署kubernetes1.18)以及安装异常问题记录

    k8s使用kubeadm进行安装步骤 使用kubeadm安装k8s会简单很多 一直想总结写一篇简单明了的安装教程 希望能有用 k8s在2020年初发布的第一个版本是1 18 0 目前最新版本是1 19 4 并且1 20的版本应该会在年底发布
  • Oracle PL/SQL中的循环处理(sql for循环)

    今年春节算是休了个长假 调整好心态 迎接新一年的挑战 今天来说下Oracle中的循环迭代处理 因为从自己的博客统计中看到 不少网友都搜索了关键字 SQL FOR循环 所以打算在这里说下个人的理解 PL SQL也和我们常用的编程语言一样 提供
  • 真香!用python做副业,月赚1W+,别被死工资拖累

    被压垮的打工人 你还好吗 房贷车贷 上老下小 日常开销 但你的收入有多少 所以你不敢生病 甚至不敢回家 就为了每个月那么点死工资 还得天天加班 然而忙忙忙 却变成了 穷忙族 成为了职场废人 其实很多人都想改变现状 想学点什么的 但就是不知从
  • c语言 字母消消乐,消消乐(C语言版)

    消消乐 游戏规则很简单 点击的位置颜色相连的区域抵消 实现思路 从点击位置开始深搜 递归 记录搜索的坐标并抵消 贴上关键代码 map数组保存每个点的颜色 state保存是否搜索过 判断当前点是否满足条件 并且未搜索过 int isValid
  • VS Code 快捷键(中英文对照版)

    标签 空格分隔 visual studio code 常用 General 按 Press 功能 Function Ctrl Shift P F1 显示命令面板 Show Command Palette Ctrl P 快速打开 Quick
  • 快速解决QQ自动下载腾讯视频播放器

    使用电脑QQ播放视频时 QQ总是会使用默认安装的腾讯视频播放器打开 可是他的这个播放器非常的卡 自己设置的默认不使用播放仍然不起作用 用geek观察了一下电脑 确实没发现腾讯视频 于是在播放视频的时候打开任务管理器 终于发现了腾讯视频播放器
  • 原理图以及vhdl设计一位全加器

    原理图设计以及VHDL设计 一位加法器 全加器原理 全加器真值 输出表达式 原理图设计法 VHDL设计法 代码如下 全加器是用门电路实现两个二进制数相加并求出和的组合线路 称为一位全加器 一位全加器可以处理低位进位 并输出本位加法进位 多个
  • 【目标检测】各种方法中比较难理解的地方

    1 评价指标mAP 全网最清楚的解释 强推 原文链接 http blog sina com cn s blog 9db078090102whzw html 理解的关键点在于每一次的precision和recall计算都是在top X的基础上
  • VMware虚拟机装win7教程

    VMware虚拟机装win7教程 前言 一 VMware虚拟机装win7 二 装Vmware Tools 1 初步装好win7后 要装Vmware Tools 2 搞不定的接着往下看 也是本人遇到的问题 总结 前言 昨晚想要在win10系统
  • 初识RecyclerView

    使用之前 implementation com android support recyclerview v7 26 1 0 添加v7的依赖 不然Recyclerview不给用 1 Xml布局 此处布局文件有两个 一个是整体的父布局文件 代
  • 利用Python实现几种常见排序算法

    一 排序算法概览 插入排序 直接插入排序 二分法插入排序 选择排序 直接选择排序 堆排序 交换排序 冒泡排序 快速排序 归并排序 二 代码实现 1 直接插入排序 最简单直接的一种方式 序列在排序中可分为左边已排序部分和右边未排序部分 每次从
  • 拷贝构造函数与深拷贝和浅拷贝

    拷贝构造函数是一种特殊的构造函数 函数的名称必须和类名称一致 它必须的一个参数是本类型的一个引用变量 作用就是用来复制对象 在使用这个对象的实例来初始化这个对象的一个新的实例 类中可以存在多个拷贝构造函数 拷贝构造函数的调用时机 当函数的参
  • Java中的代理(一)

    一 概念 代理 Proxy 是一种设计模式 提供了对目标对象另外的访问方式 即通过代理对象访问目标对象 这样做的好处是 可以在目标对象实现的基础上 增强额外的功能操作 即扩展目标对象的功能 重要的编程思想 不要随意去修改别人已经写好的代码或
  • Java中成员变量、局部变量、全局变量、静态变量存在位置及初始化

    根据定义变量位置的不同 可以将变量分为成员变量和局部变量 成员变量是 定义在一个类的变量 类中方法外 局部变量是定义在一个方法内的变量 方法中 成员变量分为 静态属性 随类的存在而存在 是在类加载的初始化 非静态属性 随实例的属性存在而存在
  • vsnprintf用法解析

    int vsnprintf char s size t n const char format va list arg 描述 将格式化数据从可变参数列表写入大小缓冲区 如果在printf上使用格式 则使用相同的文本组成字符串 但使用由arg