概述
在Linux C中,我们通常使用snprintf来格式化字符串输出,但是有一个问题,就是可能会频繁申请大的缓冲区,并且无法实现字符串的动态增加,比如你定义的字符缓存为100个字节,如果你格式化以后的内容超出了100个字节,那边后面的内容就无法看见. 所以一般来讲都为定义一个足够的字符缓冲,但这样的效率是很差的. 下面使用C++的ostringstream方式可以很轻松地搞定这些问题。
如果要重复使用一个ostringstream对象,并且需要在下次使用前清空缓冲区,则可以使用str()函数重设置缓冲区. 如:
ostringstream osSql;
//first time
osSql<<"SELECT COUNT(*) FROM t_XXXX";
...
clsConnection.Query( osSql );
....
//second time
osSql.str("");//重新使用一个空的缓冲区
osSql<<"INSERT INTO **********"<< strBigText ;
.......
1.在一个函数中重用ostringstream时,需要清空它,方法是ostr.str("")
2.获取格式化好的字符串, 通过ostringstream::str()函数就可以返回一个string对象, 调用string::c_str() 或string::data()函数就可以获得一个指向字符缓冲的char*变量.
下面给出一段示例代码
//g++ -g test_ostringstream.cpp -o test_ostringstream
//
#include <string>
#include <sstream>
#include <iostream>
#include <unistd.h>
using namespace std;
int main(int argc, char* argv[])
{
ostringstream os;
for(int i=0; i<10000; i++)
{
os.str("");
string s = "a";
double d = i + 0.100;
os << "The x is: "<< i << " " << s << " " << d;
cout << os.str() << endl;
if(i>0 && i%1000 == 0)
usleep(10);
}
return 0;
}
运行截图如下:
参考文献
[1].C++ Primer第四版中文版 第258页
[2].http://zhilingluo.blog.hexun.com/12944836_d.html
[3].http://hi.baidu.com/gongziya/item/f395738a18dcbc53850fab03
最后
以上就是孤独黑猫为你收集整理的使用C++ ostringstream来格式化字符串输出的全部内容,希望文章能够帮你解决使用C++ ostringstream来格式化字符串输出所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复