由于vsnprintf需要预先分派长度,所以并不能准确判断到底需要多长,这里通过首次分派1024来判断,若不够,后续继续分派,可得到格式化后的buffer和长度

//Handle buffer length of vsnprintf
#include <stdio.h>
#include <stdarg.h>
#include <iostream>
#include <tr1/memory>typedef std::tr1::shared_ptr<std::string> StringPtr;
StringPtr format(const char* fmt, ...)
{va_list ap;va_start(ap, fmt);StringPtr pbuf(new std::string(1024, '\0'));int ret;while ((ret = vsnprintf((char*)pbuf->c_str(), pbuf->size(), fmt, ap)) >= pbuf->size()){pbuf->resize(pbuf->size() * 2);va_start(ap, fmt);}pbuf->resize(ret);va_end(ap);return pbuf;
}int main()
{StringPtr p = format("%d123456789%s", 0, "^**********************************************$");std::cout<<p->size()<<" "<<*p<<std::endl;
}

vsnprintf长度相关推荐

  1. stetho 调试数据库_stetho是适用于android应用程序的最佳调试工具

    stetho 调试数据库 As Android developers, our development life often involves integrating API or web servi ...

  2. vsnprintf的作用和使用

      vsnprintf用来将可变参数格式化输出到一个字符数组,常和va_start和va_end一起使用. vsnprintf函数介绍 函数功能:将可变参数格式化输出到一个字符数组. 注意: 在lin ...

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

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

  4. C/C++vsnprintf用法(要配合va_list使用)

    _vsnprintf是C语言库函数之一,属于可变参数.用于向字符串中打印数据.数据格式用户自定义.头文件是#include <stdarg.h>. 参数说明: char *str [out ...

  5. C++ Reference: Standard C++ Library reference: C Library: cstdio: vsnprintf

    C++官网参考链接:https://cplusplus.com/reference/cstdio/vsnprintf/ 函数  <cstdio> vsnprintf int vsnprin ...

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

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

  7. 如何使用vsprintf, vsnprintf等函数

    前言 在一些c++的框架中,有很多小的util函数,通常每个框架里都会有一个log函数,用法类似于printf(fmt, ...), 比如cocos2d-x的log函数用法大概像下面这样: log(& ...

  8. va_start,vsnprintf,va_end日记内存溢出解决!!!

    vsprintf有三个参数.一个用於保存结果的字元缓冲区和一个格式字串.第三个参数是指向格式化参数阵列的指标. vsprintf(buffer,format,argptr); format:格式字符串 ...

  9. vsnprintf用法解析

    int vsnprintf (char * s, size_t n, const char * format, va_list arg ); 描述: 将格式化数据从可变参数列表写入大小缓冲区 如果在p ...

最新文章

  1. java 整合solr_SpringBoot整合Spring Data Solr
  2. 整合quickx到普通cocos2dx
  3. EleemntUI中el-table的formatter格式化字典显示的使用
  4. rocketmq安装,内存配置,各种命令说明,windows下安装,控制台工具
  5. ubtuntu server下的包管理
  6. 如何取消 登录_LSAT | 退考、缺考、取消成绩,各自的区别和流程是怎样的?
  7. leetcode10. 正则表达式匹配 一道没有解释的字符串dp困难题
  8. Android学习之网上商城(下)
  9. 【TensorFlow】TensorFlow函数精讲之 tf.nn.relu()
  10. Android自定义View控件
  11. 格局再变?AWS CDN 落地中国
  12. Android Spinner 设置setOnItemSelectedListener时,竟会默认触发一次事件!
  13. 医学遗传学词汇英语术语英文(Glossary) 5
  14. 湖南工大c语言上机题库,湖南科技大学2010年C语言上机题库
  15. Java Web开发学习手册_Java Web实战开发完全学习手册
  16. AI_Drug: 分子生成模型之VAE(一)
  17. 全网搜索一个人的痕迹,爬取百度搜索结果
  18. 米狗族 Android平台Qt开发入门教程
  19. 成功解决WebMediaCfg.ini文件被清空引起的“没有找到数据库”
  20. 1bit和1byte_带宽单位是位(bit)网速单位是字节(Byte)1字节等于8位

热门文章

  1. window服务器nginx无法启动
  2. 华为云存储All-Flash战略:成就不凡的微秒时代
  3. 学系统集成项目管理工程师(中项)系列28_后记
  4. skew算法_一种基于FPGA的多通道高速输入信号自动de‑skew算法的制作方法
  5. 【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计
  6. C++ 算法 高精度(较详细.)
  7. 蓝牙模块的天线类型有哪些,屏蔽罩是否需要?
  8. xunsearch php,xunsearch
  9. ssm注销用户的方法
  10. java 微信 qq 登录_java实现 微博登录、微信登录、qq登录实现代码