该小程序演示了变参的用法。它的功能是,仿照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. LVS Nginx Haproxy对比

    一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术. 具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了: 如果机器不少,可以 ...

  2. python常用模块-1

    一.认识模块 1.什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.py文 ...

  3. $python正则表达式系列(2)——re模块常用函数

    本文主要介绍正则re模块的常用函数. 1. 编译正则 import re p = re.compile(r'ab*') print '[Output]' print type(p) print p p ...

  4. php获取MAC地址

    /** *获取mac地址 **/ class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 var $mac_addr; fun ...

  5. springboot-数据库

    Spring-data-jpa jpa定义了一系列持久化的标准,比如hibernate就实现了这一标准. Springboot 的jpa就是hibernate的整合. 在pom文件中增加配置: < ...

  6. 常用模块---sys&logging&序列化模块(json&pickle)

    sys 模块 sys.argv 命令行参数List,第一个元素是程序本身路径,通常用来避免io 阻塞 print('欢迎进入') info=sys.argv ': print('login succe ...

  7. MongoDB命令语法小用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using MongoDB; ...

  8. [Android]开源中国源码分析之二---DrawerLayout

    从启动界面到主界面之后的效果如图所示,采用的是v4包下的DrawerLayout, activity_main.xml文件如下: <!-- A DrawerLayout is intended ...

  9. HTML图片热区 map area 标签

    实例 <img src ="planets.gif" alt="Planets" usemap ="#planetmap" /> ...

  10. HDFS数据流-剖析文件读取及写入

    HDFS数据流-剖析文件读取及写入 文件读取 1. 客户端通过调用FileSystem对象的open方法来打开希望读取的文件,对于HDFS来说,这个对象是分布式文件系统的一个实例.2. Distrib ...