#include "stdafx.h" gCPH>8JwS0
%Rf9KQ
#include <iostream> #oa>Z.?_V
#include <fstream> ,G46i)E\
#include <sstream> -Z:x!M[Xr
#include <iterator> k ZF<~U
using namespace std; '"\n,3h
hx;kNcPbI
int main(int argc, char* argv[]) M_UmnqN1C
{ t7u*j-YE
ifstream ifs("test.txt"); k'|yUJ,
if(!ifs) v!ai_d^
return false; s+fxv(,"c
!',%kvJI
ostringstream oss; W ).Kq-
istream_iterator<char> inpos(ifs); Kf[.@_TD<1
istream_iterator<char> endpos; CC"a2Hu/
ostream_iterator<char> out(oss); x+za6e_k"
std::copy(inpos, endpos, out); WvJ:yUb2
string& szData = oss.str(); cMT:Ij];
gy,)%{,G
const char * cc = szData.c_str(); ;a@riPqx!
// cout << (long)szData << endl; D=3Z] 'A
// cout << (long)oss.str().c_str() << endl; fgj$
u
cout<< cc; # }}6JM
p6BDhT(RS
return 0; 'a JE+
} R\7r!38
<+q`Dk
注意以上代码中红色部分没有写成: ~/JS_>e#6P
const char * cc = oss.str().c_str(); // error hg0{x/Dgny
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 pL[3,.@WA
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。