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! 
 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: 
 string &  ss  =  oss.str(); 
 
const char *  szData  =  ss.c_str();

 

posted @ 2009-07-22 14:55  回忆1919  阅读(863)  评论(0编辑  收藏  举报