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

取得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();
原文地址:https://www.cnblogs.com/dongzhiquan/p/1998213.html