#include "stdafx.h" k\)Cw
T<b+s#n4
#include <iostream> Of}|ib^t
#include <fstream> n]Li->1
#include <sstream> aG`;OgrH
#include <iterator> .N m su+s
using namespace std; myFAKRc
F_3:bX
int main(int argc, char* argv[]) JC?N_kP%W
{ ,YYVj{~2
ifstream ifs("test.txt"); !c#]?b%
if(!ifs) '_P\#7$!MV
return false; R,2P3lv1v@
W-~n|PX8+
ostringstream oss; 6=hk=2]f
istream_iterator<char> inpos(ifs); 5sO@OV\
y
istream_iterator<char> endpos; tB7}|jC
ostream_iterator<char> out(oss); [/M^[p
std::copy(inpos, endpos, out); xw^.bz|
string& szData = oss.str(); ;
0v>Rfa
)v4b
const char * cc = szData.c_str(); Z"-L[2E/{!
// cout << (long)szData << endl; E.bi05l
// cout << (long)oss.str().c_str() << endl; {XurC}#\
cout<< cc; &;TJ~r#K
SO\/-]9#
return 0; zvc`3
} ykg# {9+
=DbY? Q<Q
注意以上代码中红色部分没有写成: "t=hzn"~%
const char * cc = oss.str().c_str(); // error $!@\
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ]q5`YB%_
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。