#include "stdafx.h" 0I%: BT
`X8@/wf#
#include <iostream> DW2>&|
#include <fstream> ! OE*z $\
#include <sstream> fx?$9(r,
#include <iterator> )=_ycf^MC
using namespace std; M-MKk:o
GYK\LHCPd
int main(int argc, char* argv[]) M_1;$fWq
{ , =y#m-9
ifstream ifs("test.txt"); 3S"] u}
if(!ifs) CL9yEy"V
return false; OJ3UE(,I=
C`K^L=8`{
ostringstream oss; vsMmCd)7U
istream_iterator<char> inpos(ifs); ctn,
]ld
istream_iterator<char> endpos; ' [p)N,
ostream_iterator<char> out(oss); p'Bm8=AwD
std::copy(inpos, endpos, out); id,NONb\
string& szData = oss.str(); v 1+U;Th>g
X0uJNHO
const char * cc = szData.c_str(); f_\_9o"l
// cout << (long)szData << endl; \b8\Ug~t
// cout << (long)oss.str().c_str() << endl; O4|2|sA
cout<< cc; G0d&@okbFC
~5OL6Bi-q
return 0; -x]`DQUg
} mTf<
u, kU$
注意以上代码中红色部分没有写成: \N6\v5vh
const char * cc = oss.str().c_str(); // error p3]Q^KFS
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 }[!92WS/ee
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。