首页 > 其他分享 >simple sprintf wrapper

simple sprintf wrapper

时间:2024-08-18 22:27:49浏览次数:14  
标签:std format simple args wrapper sprintf com size

version 0

#include <memory>
#include <string>
#include <stdexcept>

template<typename ... Args>
std::string string_format( const std::string& format, Args ... args )
{
    int size_s = std::snprintf( nullptr, 0, format.c_str(), args ... ) + 1; // Extra space for '\0'
    if( size_s <= 0 ){ throw std::runtime_error( "Error during formatting." ); }
    auto size = static_cast<size_t>( size_s );
    std::unique_ptr<char[]> buf( new char[ size ] );
    std::snprintf( buf.get(), size, format.c_str(), args ... );
    return std::string( buf.get(), buf.get() + size - 1 ); // We don't want the '\0' inside
}

int main()
{
    stringg aa = format("test %d %s", 100, "abc");
    printf(aa.c_str());
    return 0;
}

version 1

#include <stdio.h>
#include <stdarg.h>

void Error (char * format, ...)
{
  char buffer[256];
  va_list args;
  va_start (args, format);
  vsnprintf (buffer, 255, format, args);


  //do something with the error

  va_end (args);
}

ref

cplusplus.com/reference/cstdio/vsnprintf/: https://cplusplus.com/reference/cstdio/vsnprintf/
cplusplus.com/reference/cstdio/snprintf/: https://cplusplus.com/reference/cstdio/snprintf/
c++ - std::string formatting like sprintf - Stack Overflow: https://stackoverflow.com/questions/2342162/stdstring-formatting-like-sprintf
c++ - How to pass variable number of arguments to printf/sprintf - Stack Overflow: https://stackoverflow.com/questions/1056411/how-to-pass-variable-number-of-arguments-to-printf-sprintf

标签:std,format,simple,args,wrapper,sprintf,com,size
From: https://www.cnblogs.com/yusisc/p/18366212

相关文章

  • 萌新赛 sprintf漏洞
    首先是个.git源码源码泄露,用githack回复一下源码源码<?php$pass=sprintf("andpass='%s'",addslashes($_GET['pass']));$sql=sprintf("select*fromuserwherename='%s'$pass",addslashes($_GET['name']));?>......
  • 8.simple-jwt
    【一】simple-jwt快速使用1)安装pipinstalldjangorestframework-simplejwt2)使用1.签发路由配置fromdjango.urlsimportpathfromrest_framework_simplejwt.viewsimporttoken_obtain_pairurlpatterns=[path('login/',token_obtain_pair)]2.认证......
  • SimpleJarBoot 简单程序启动器
    ​ 介绍Jar包的程序启动器脚本Jar脚本,Jar运行脚本,Jar包脚本,Jar服务启动脚本安装脚本if[-f/usr/bin/curl];thencurl-sSOhttps://gitee.com/wl4837/simple-jar-boot/raw/master/simple-jar-boot.sh;elsewget-Osimple-jar-boot.shhttps://gitee.com/wl4837/sim......
  • 【CTF | WEB】002、攻防世界WEB题目之simple_php
    文章目录simple_php题目描述:解题思路:原理simple_php题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。解题思路:打开场景<?phpshow_source(__FILE__);include("config.php");$a=@$_GET['a'];$b=@$_GET['b'];if($a==0and$a){......
  • BugKu CTF Misc:被勒索了 & disordered_zip & simple MQTT & 请攻击这个压缩包
    前言BugKu是一个由乌云知识库(wooyun.org)推出的在线漏洞靶场。乌云知识库是一个致力于收集、整理和分享互联网安全漏洞信息的社区平台。BugKu旨在提供一个实践和学习网络安全的平台,供安全爱好者和渗透测试人员进行挑战和练习。它包含了各种不同类型的漏洞场景,如Web漏洞、系统......
  • gradle-wrapper使用
    Gradle简介Gradle是和maven类似的构建工具,基于groovy开发gradle-wrapper的好处能自动下载对应版本的Gradle(这样,尽管机器上没有gradle也能运行gradle,因为会帮你下)各个环境的Gradle能保持一致(能避免构建工具版本不同导致的问题)​ 从github拉一个gradle项目下来,一般都会有......
  • Date日期类和SimpleDateFormat日期格式化类day12
    packagecom.shujia.day12;importjava.text.SimpleDateFormat;importjava.util.Date;/*日期相关的类:Date构造方法:publicDate()获取当前时间的Date类型格式:FriAug0920:33:11CST2024publicDate(longdate)获取指......
  • sprintf_s
            sprintf_s 函数是一个用于将数据格式化输出到字符串的安全版本函数,它在一定程度上避免了传统 sprintf 函数可能导致的缓冲区溢出问题。以下是对 sprintf_s 函数的详细解释:1函数原型intsprintf_s(char*buffer,size_tsizeOfBuffer,constchar*form......
  • 【技术精粹】LambdaQueryWrapper实战指南:MyBatis-Plus从入门到精通(上:入门、基础用法
    文章目录JavaMyBatis-PlusLambdaQueryWrapper深入理解与实战应用前言第一部分:MyBatis-Plus入门1.1MyBatis-Plus是什么?1.2快速上手第二部分:LambdaQueryWrapper基础2.1LambdaQueryWrapper概览2.2LambdaQueryWrapper使用入门第三部分:LambdaQueryWrapper高级......
  • mybatis-plus 自定义sql拼接 的方式进行Wrapper条件查询 实现了分页 多表查询
    法一:用单表的思想(可以跳过,直接看法二)方法:先收集公共字段到集合中,再批量查询,然后封装起来缺点:相较于法二,代码量大,多访问了一次数据库service层:@Service@RequiredArgsConstructorpublicclassProductServiceImplextendsServiceImpl<ProductMapper,Product>implements......