社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 社区论坛任务 迷你宠物
  • 4432阅读
  • 0回复

stringstream提取字符串的问题

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
#include "stdafx.h" e}gGl<((g  
"kt7m  
#include <iostream> Aa-OMo;~  
#include <fstream> Gf7r!Ur;g  
#include <sstream> 3-y2i/4}$  
#include <iterator> V 7 p{'C   
using namespace std; |p/[sD+M  
9-# =xE9'U  
int main(int argc, char* argv[]) ty;a!yjC  
{ }q_Iep  
ifstream ifs("test.txt"); G"J 8i|~  
if(!ifs) <YG 42,N  
return false; /L`qOr2E  
i @M^l`w  
ostringstream oss; 0kp{`3ce  
istream_iterator<char> inpos(ifs); " u]X/ {L  
istream_iterator<char> endpos; 3DjX0Dx/l  
ostream_iterator<char> out(oss); 4d`f?8vS  
std::copy(inpos, endpos, out); ktY  
string& szData = oss.str(); DBfq9%J _  
&4t=Y`]SL  
const char * cc = szData.c_str(); }P!:0w3  
// cout << (long)szData << endl; ?S)Pv53>}  
// cout << (long)oss.str().c_str() << endl; 4fL>Ou[YuX  
cout<< cc; \J~@r1  
7CU<R9Kl  
return 0; 6C_H0a/h&  
} j%S} T)pX  
mg3YKHNG  
  注意以上代码中红色部分没有写成: ZV/g_i #  
  const char * cc = oss.str().c_str(); // error 9-Qu5L~  
  要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Ta8lc %0w3  
  所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录 或 注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
认证码:
验证问题:
3+5=?,请输入中文答案:八 正确答案:八