#include "stdafx.h" lnL&v'{
GjZ@fnF
#include <iostream> cw.Uy(ks|$
#include <fstream> $_ub.g|
#include <sstream> oc'#sE
#include <iterator> %Y%+K5;AZ
using namespace std; UXD?gK1
1<A+.W
int main(int argc, char* argv[]) L(TO5Y]
{ sN|-V+7&j
ifstream ifs("test.txt"); 5~k-c Ua
if(!ifs) d='z^vHK
return false;
Y<TlvB)w
pC(AM=RY!
ostringstream oss; ,{ CgOz+Ul
istream_iterator<char> inpos(ifs); N%;Q[*d@/
istream_iterator<char> endpos; fOiLb.BW
ostream_iterator<char> out(oss); Z)'jn8?P
std::copy(inpos, endpos, out); @iB**zR/
string& szData = oss.str(); PN2\:l+`
6nt$o)[
const char * cc = szData.c_str(); y$s}-O]/-
// cout << (long)szData << endl; //@_`.
// cout << (long)oss.str().c_str() << endl; Uy^Hh4|
cout<< cc; Y>t*L#i
nQK@Uy5Yr
return 0; 8F($RnP3
} /'
L20aN2
%_u*5,w
注意以上代码中红色部分没有写成: S1uW`zQ!+_
const char * cc = oss.str().c_str(); // error G+4a%?JH
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 `}k!SqG
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。