该小程序演示了变参的用法。它的功能是,仿照sprintf,将变参内容保存到string中。

/*
功能说明:
仿照sprintf,将字符串格式化到一个string对象中。
实现方式:
该例子主要是用来演示变参的用法。
使用变参的时候,需要头文件stdarg.h,其使用方式为:va_start(),vsprintf(),va_end()按照顺序的结合。
程序调用vsprintf将变参格式化到该临时字符数组中,然后再将此临时字符数组中的数据复制到string对象中。
限制条件或者存在的问题:
程序在内存的堆中创建了一个临时字符数组,该字符数组的长度为2048个字节。
*/
#include <iostream>
#include <string>
#include <cstring>
#include <cstdarg> using namespace std; // 仿照sprintf,将字符串格式化到string中。
void formatString(string & s, const char *format, ...)
{
size_t strMaxLen = ;
char * tmp = new char[strMaxLen];
memset(tmp, 0x00, strMaxLen);
//为string赋值
va_list list;
va_start(list, format);
//size_t len = vsnprintf(tmp, strMaxLen, format, list);
size_t len = vsprintf(tmp, format, list);
if (len >= strMaxLen)
{
tmp[strMaxLen - ] = '\0';
}
va_end(list);
s = tmp;
delete[] tmp;
} // 仿照sprintf,将字符串追加到string中。
void appendString(string & s, const char *format, ...)
{
size_t strMaxLen = ;
char * tmp = new char[strMaxLen];
memset(tmp, 0x00, strMaxLen);
//为string赋值
va_list list;
va_start(list, format);
//size_t len = vsnprintf(tmp, strMaxLen, format, list);
size_t len = vsprintf(tmp, format, list);
if (len >= strMaxLen)
{
tmp[strMaxLen - ] = '\0';
}
va_end(list);
s.append(tmp);
delete[] tmp;
} int main(int argc, char **argv)
{
cout << "process begin at " << (void*)&main << endl; string str;
cout << "strlen is " << str.length() << endl;
formatString(str, "Hello, world: %d, %lf %s", , 5462.56 / , "man");
cout <<"after format:" <<str << endl;
appendString(str, "|Hello, world: %d, %lf %s", , 5462.56 / , "man");
cout <<"after append:"<< str << endl; return ;
}

输出的结果为:

process begin at 01251541
strlen is 0
after format:Hello, world: 435, 101.158519  man
after append:Hello, world: 435, 101.158519  man|Hello, world: 435, 101.158519  man

将变参格式化到一个string对象中的更多相关文章

  1. js String对象中常用方法小结(字符串操作)

    1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号.有效值为0到字符 ...

  2. String对象中常用的方法

    String对象中常用的方法   1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码.strObj.charCodeAt(index)说明:index将被处理字符的从零开始 ...

  3. js 判断字符串是否包含某字符串,String对象中查找子字符,indexOf

    var Cts = "bblText";   if(Cts.indexOf("Text") > 0 ) {     alert('Cts中包含Text字符 ...

  4. 【Java面试题】15 String s="Hello"; s=s+“world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?String与StringBuffer的超详细讲解!!!!!

    1.Java中哪些类是不能被继承的? 不能被继承的是那些用final关键字修饰的类.一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,在java中,System,Str ...

  5. 005 String s = "Hello";s = s + " world!";执行这两行代码执行后,原始的 String 对象中的内容到底变了没有?

    原始的String对象中的内容没有改变成“Hello world”. 1.原因 因为在Java中String类被设计成不可改变的类,所以String类的所有对象都是不可变的.第一句代码中,s(存储在栈 ...

  6. String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

    没有.因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象.在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行 ...

  7. 声明一个set集合,使用HashSet类,来保存十个字符串信息,然后通过这个集合,然后使用iterator()方法,得到一个迭代器,遍历所有的集合中所有的字符串;然后拿出所有的字符串拼接到一个StringBuffer对象中,然后输出它的长度和具体内容; 验证集合的remove()、size()、contains()、isEmpty()等

    package com.lanxi.demo1_3; import java.util.HashSet; import java.util.Iterator; import java.util.Set ...

  8. String对象中常用的方法有哪些?

    1.length()字符串长度 String str="abc"; System.out.println(str.length()); //输出3 2.charAt()截取一个字符 ...

  9. 用于string对象中字符截取的几种函数总结——语法、参数意义及用途举例

    1. charAt():返回指定位置的字符. 语法:stringObject.charAt(index) 参数意义:index  必需,指字符在字符串中的下标.需要注意的是,字符串中第一个字符的下标是 ...

随机推荐

  1. PDO:数据访问抽象层

    <?php //PDO:数据访问抽象层 //带有事务功能: //dsn:数据源 $dsn="mysql:host=localhost;dbname=aaas"; //造pdo ...

  2. iOS 11 Xcode9开发 新特性学习 (警告篇)

    最新版本SDK优化了开发体验,编译过程会提供更多提示警告,建议你修改.这些功能也可以自主选择用或者不用,当然,苹果喜欢你用他推荐的东西... 1 . @avalibale 语法,同步判断当前iOS系统 ...

  3. 树莓派使用DHT11温湿度传感器(C语言程序)

    pi4j是基于wiringpi开发的通过java来控制树莓派GPIO口的库文件.在java程序中引入相关类就可以使用已经封装好的方法控制树莓派GPIO口. pi4j官网:http://pi4j.com ...

  4. 编译android源码m、mm、mmm命令的使用

    http://blog.163.com/zz_forward/blog/static/212898222201442873435471/ gcc怎么查看它的默认include路径和库的路径呢? //- ...

  5. 关于Pytorch的二维tensor的gather和scatter_操作用法分析

    看得不明不白(我在下一篇中写了如何理解gather的用法) gather是一个比较复杂的操作,对一个2维tensor,输出的每个元素如下: out[i][j] = input[index[i][j]] ...

  6. Go 内置库 IO interface

    基本的 IO 接口 io 包为 I/O 原语提供了基本的接口.它主要包装了这些原语的已有实现. 由于这些接口和原语以不同的实现包装了低级操作,因此除非另行通知,否则客户端不应假定它们对于并行执行是安全 ...

  7. win10系统下载地址

    Win10正式版微软官方原版ISO系统镜像下载: Win10正式版32位简体中文版(含家庭版.专业版) 文件名: cn_windows_10_multiple_editions_x86_dvd_684 ...

  8. CF703D Mishka and Interesting sum

    题意:给定一个1e6长度的值域1e9的数组.每次给定询问,询问区间内出现偶数次的数的异或和. 题解:首先很显然,每一次询问的答案,等于这个区间所有不同元素异或和异或上区间异或和.(因为出现偶数次的对区 ...

  9. EntityFramework 学习 一 Colored Entity in Entity Framework 5.0

    You can change the color of an entity in the designer so that it would be easy to see related groups ...

  10. 搭建confluence参考文献

    https://www.cnblogs.com/kevingrace/p/7607442.html https://yq.aliyun.com/articles/144747?t=t1 jira: h ...