#include "stdafx.h" BAKfs/N
1m![;Pg3
#include <iostream> CWDo_g$
#include <fstream> E RMh% C
#include <sstream> nK96A.B%p
#include <iterator> oFIs,[Go
using namespace std; b?y1cxTT
9td(MZ%i~N
int main(int argc, char* argv[]) ~O^_J)
{ < )?&Jf>_
ifstream ifs("test.txt"); _D+7w'8h
if(!ifs) W&p-Z"=)
return false; oNEU?+
z1Ju;k(8
ostringstream oss; H[G EAQO
istream_iterator<char> inpos(ifs); <$=8'$T81
istream_iterator<char> endpos; R0=/
Th -
ostream_iterator<char> out(oss); <QJmdcG
std::copy(inpos, endpos, out); #pVk%5N
string& szData = oss.str(); RI%l& Hm
SZ1C38bd,.
const char * cc = szData.c_str(); c9ZoO;
// cout << (long)szData << endl; {Rz`)qqE
// cout << (long)oss.str().c_str() << endl; Lh,<q
>t
cout<< cc; Jq; }q63:
/y-P)3_
return 0; X:!%"K%}
} k1cBMDSokO
#/1Bam6
注意以上代码中红色部分没有写成: DV.MvFV
const char * cc = oss.str().c_str(); // error
:?^(&3;
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ~\kRW6
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。