#include "stdafx.h" $QQv$
&P>wIbE
#include <iostream> o<f[K}t9
#include <fstream> _@3?yv~ D
#include <sstream> C'C'@?]
#include <iterator> SRq0y,d
using namespace std; Ea@N:t?(8=
KDP7u
int main(int argc, char* argv[]) [\NyBc
{ ^Z7])arA
ifstream ifs("test.txt"); ^7C?yC
if(!ifs) 0Y#S2ty
return false; ?pdvFM
7bioLE
ostringstream oss; DXj_\ R(}
istream_iterator<char> inpos(ifs); /[YH
W]
istream_iterator<char> endpos; M9{?gM9
ostream_iterator<char> out(oss); Ob+L|FbnN
std::copy(inpos, endpos, out); EB'(%dH
string& szData = oss.str(); tp2CMJc{L
g_Wf3o857J
const char * cc = szData.c_str(); 8M m,a
// cout << (long)szData << endl; *
";A~XNx
// cout << (long)oss.str().c_str() << endl; _K{hq<g
cout<< cc; CLI!( 8ZW
vS%r_gf(
return 0; :_YpSw<Q
} *h Ph01
pX
]K-
注意以上代码中红色部分没有写成: mc_`:I=
const char * cc = oss.str().c_str(); // error wXf_2qB9
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 is`Eqcj`dr
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。