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

stringstream提取字符串的问题

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
#include "stdafx.h" qIIl,!&}A  
lh?TEQ  
#include <iostream> z8"(Yy7m  
#include <fstream> xf?6_=  
#include <sstream> H LnizE  
#include <iterator> ?{Gf'Y}y&  
using namespace std; cqyrao3;  
c 8 xZT  
int main(int argc, char* argv[]) (GNY::3  
{ EN!Q]O|  
ifstream ifs("test.txt"); EhBYmc" &  
if(!ifs) *`HE$k!  
return false; zwyK \j  
~Ue t)y<  
ostringstream oss; Z} 8 m]I  
istream_iterator<char> inpos(ifs); *7yu&a8  
istream_iterator<char> endpos; Q41eYzAi  
ostream_iterator<char> out(oss); HAi'0%"  
std::copy(inpos, endpos, out); ]1XJQW@gF  
string& szData = oss.str(); F/qx2E$*wo  
0R0j7\{  
const char * cc = szData.c_str(); )G">7cg;t  
// cout << (long)szData << endl; b2Jgg&?G  
// cout << (long)oss.str().c_str() << endl; Gpauy=4f  
cout<< cc; J:q:g*Wi  
FLI0C  
return 0; 3~%wA(|A  
} h 'F\9t  
?_+h+{/@B  
  注意以上代码中红色部分没有写成: dt efDsK  
  const char * cc = oss.str().c_str(); // error P}El#y#&  
  要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 :&/b}b!)AX  
  所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

您目前还是游客,请 登录注册
温馨提示:欢迎交流讨论,请勿纯表情、纯引用!
认证码:
验证问题:
10+5=?,请输入中文答案:十五