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

stringstream提取字符串的问题

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
#include "stdafx.h" xC3h m  
t=,ZR}M1`  
#include <iostream> ?vmu,y  
#include <fstream> ?]*WVjskE  
#include <sstream> /_WA F90R?  
#include <iterator> &cZQ,o  
using namespace std; 9v\x&h  
~lBb%M  
int main(int argc, char* argv[]) '}4z=f`}  
{ a ~s:f5S>  
ifstream ifs("test.txt"); `,lm:x+(0  
if(!ifs) CbvP1*1  
return false; 6MCLm.L  
#'DrgZ)W  
ostringstream oss; cTC -cgp  
istream_iterator<char> inpos(ifs); pUc N-WA  
istream_iterator<char> endpos; /KU9sIE;  
ostream_iterator<char> out(oss); lN(|EI  
std::copy(inpos, endpos, out); XmZs4~\K$G  
string& szData = oss.str(); pZE}<EX  
kM:Z(Z7$  
const char * cc = szData.c_str(); Mh =yIx</  
// cout << (long)szData << endl; |IcA8[  
// cout << (long)oss.str().c_str() << endl; 0W_olnZ  
cout<< cc; C VXz>oM  
(:(Im k;9  
return 0; Yvi.l6JL  
} tPp9=e2[s  
l|kGp~  
  注意以上代码中红色部分没有写成: C Oc,  
  const char * cc = oss.str().c_str(); // error VyMFALSe]h  
  要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 RJ\'"XQ  
  所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
描述
快速回复

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