#include "stdafx.h" "fSaM&@[B
)Wt&*WMFXl
#include <iostream> (6[/7e)
#include <fstream> t%k`)p7O
#include <sstream> =>Qd
#include <iterator> i=rA;2>
using namespace std; ;yjw(OAI*
I*a.!/$)
int main(int argc, char* argv[]) -y3[\zNe
{ 2lN0Sf@
ifstream ifs("test.txt"); *&h]PhY
if(!ifs) ft0d5n!ui4
return false; !mwMSkkq
b`DPlQHj
ostringstream oss; )u]=^
istream_iterator<char> inpos(ifs); ]+w 27!
istream_iterator<char> endpos; m@L>6;*
ostream_iterator<char> out(oss); zA$ f$J7\^
std::copy(inpos, endpos, out); ]y$/~(OW
string& szData = oss.str(); pV 8U`T
S?D]P'<
const char * cc = szData.c_str(); vtK.7AF
// cout << (long)szData << endl; V;)+v#4{
// cout << (long)oss.str().c_str() << endl; L7xiq{t`Y
cout<< cc; 9j-;-`$S
M9~'dS'XI
return 0; f= }!c*l"
} **1=|aa:
A5%Now;.cf
注意以上代码中红色部分没有写成: 6-5{7E}/b
const char * cc = oss.str().c_str(); // error &H}Xk!q5b^
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 43,*.1;sz
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。