将变参格式化到一个string对象中
该小程序演示了变参的用法。它的功能是,仿照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对象中的更多相关文章
- js String对象中常用方法小结(字符串操作)
1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号.有效值为0到字符 ...
- String对象中常用的方法
String对象中常用的方法 1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码.strObj.charCodeAt(index)说明:index将被处理字符的从零开始 ...
- js 判断字符串是否包含某字符串,String对象中查找子字符,indexOf
var Cts = "bblText"; if(Cts.indexOf("Text") > 0 ) { alert('Cts中包含Text字符 ...
- 【Java面试题】15 String s="Hello"; s=s+“world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?String与StringBuffer的超详细讲解!!!!!
1.Java中哪些类是不能被继承的? 不能被继承的是那些用final关键字修饰的类.一般比较基本的类型或防止扩展类无意间破坏原来方法的实现的类型都应该是final的,在java中,System,Str ...
- 005 String s = "Hello";s = s + " world!";执行这两行代码执行后,原始的 String 对象中的内容到底变了没有?
原始的String对象中的内容没有改变成“Hello world”. 1.原因 因为在Java中String类被设计成不可改变的类,所以String类的所有对象都是不可变的.第一句代码中,s(存储在栈 ...
- String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有.因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象.在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行 ...
- 声明一个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 ...
- String对象中常用的方法有哪些?
1.length()字符串长度 String str="abc"; System.out.println(str.length()); //输出3 2.charAt()截取一个字符 ...
- 用于string对象中字符截取的几种函数总结——语法、参数意义及用途举例
1. charAt():返回指定位置的字符. 语法:stringObject.charAt(index) 参数意义:index 必需,指字符在字符串中的下标.需要注意的是,字符串中第一个字符的下标是 ...
随机推荐
- CentOS上快速安装saltstack
查看当前centos版本号 cat /etc/redhat-release 查看内核版本 uname -r 主机 1.安装master(在第一台机器上安装master) 执行: wget -O /et ...
- rails generator
generate 查找顺序 rails/generators/initializer/initializer_generator.rb generators/initializer/initializ ...
- springboot-数据库
Spring-data-jpa jpa定义了一系列持久化的标准,比如hibernate就实现了这一标准. Springboot 的jpa就是hibernate的整合. 在pom文件中增加配置: < ...
- 玩转python主题模型程序库gensim
gensim是python下一个极易上手的主题模型程序库(topic model),网址在:http://radimrehurek.com/gensim/index.html 安装过程较为繁琐,参考h ...
- android驱动USB摄像头
http://blog.csdn.net/mirkerson/article/details/50764314 多亏了stackoverflow看到的一篇帖子,其中有几句关键的话,然后顺藤摸瓜解决了问 ...
- ubuntu centos macos 配置上网代理
因为我国强大的GFW,导致很多国外的应用无法安装,因为需要在系统中配置http/https代理. Ubuntu代理配置 配置方式非常简单,在~/.bashrc文件中增加: echo "exp ...
- phpMyAdmin中config.inc.php设置密码和修改密码的方法
phpMyAdmin有3种授权模式: 1. cookie: 显示一个web登录页面,输入mysql的用户名和密码,然后进入管理界面. $cfg['Servers'][$i]['auth_type'] ...
- ubuntu 下使用vi时方向键乱码,退格键不能使用
ubuntu 下使用vi时方向键乱码,退格键不能使用的解决方法 问题表现:Ubuntu下,初始使用vi,编辑模式下使用方向键的时候,并不会使光标移动,而是在命令行中出现A B C D 之类的字母,并且 ...
- java基础(2)-面向对象(2)
构造方法 构造方法特点 方法名与类名相同 方法名前没有返回值类型的声明(void也没有) 方法中不能使用return语句返回一个值 创建对象时自动调用并执行 如果类中没有自定义构造方法,则java调用 ...
- 微信开发之SSM环境搭建
首先,感谢大神的文章,地址:http://blog.csdn.net/zhshulin/article/details/37956105# 第一步:新建maven项目 如有需要,查看之前的文章:从配置 ...