std::ostringstream::str()返回临时对象

本文介绍如何正确使用std::ostringstream获取字符串内容,避免内存错误,并展示了从文件读取内容到ostringstream的方法。

取得std::ostringstream里的内容可以通过str()和str(string&)成员函数。由于str()返回的是临时对象,因而会有如下误用:

const char *  pBuffer  =  oss.str().c_str();

pBuffer指向的内存已被析够!
测试代码:

ostringstream oss;
        oss 
<< " something you like " <<  endl;
 
 
//  can't work!
 const char *  szData1  =  oss.str().c_str();
 
 
// work!
std::string  ss  =  oss.str();
 
const char *  szData2  =  ss.c_str();

例子:
用std::ostringstream获取整个文件的内容:        

ifstream ifs( " in.txt " );
 
        istream_iterator
< char >  inpos(ifs);
        istream_iterator
< char >  endpos;
        ostream_iterator
< char > out (oss);
        std::copy(inpos, endpos, 
out );
 
 
// 有些情况下需要取得buffer:
std::string  ss  =  oss.str();
 
const char *  szData  =  ss.c_str();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值