#include "stdafx.h" &;SwLDF"1
hg<"Yg=
#include <iostream> cij]&$;Q
#include <fstream> K|P9uHD
#include <sstream> u K+9gTv
#include <iterator> iX0]g45o
using namespace std; }z9I`6[
a>;3
j
int main(int argc, char* argv[]) +xoyKP!
{ A52LH,
ifstream ifs("test.txt"); [XA&&EcU
if(!ifs) uOivnJ?
return false; =%:n0S0C"
AQJ|^'%
ostringstream oss; )3D+gu
istream_iterator<char> inpos(ifs); .b!OZ
istream_iterator<char> endpos; j\i;'t}8g
ostream_iterator<char> out(oss); (1saof*p%
std::copy(inpos, endpos, out); !;xf>API
string& szData = oss.str(); A1#4nkkc9
[RGC!}"mr
const char * cc = szData.c_str(); Zpn*XG
// cout << (long)szData << endl; 0{^l2?mgSb
// cout << (long)oss.str().c_str() << endl; L@d]R MNv
cout<< cc; Q{ |+3!!'
e{qp!N1!
return 0; +j)-L \
} 7$Z)fkx.
T2/v}
注意以上代码中红色部分没有写成: 46Y7HTwE
const char * cc = oss.str().c_str(); // error 8o%<.]
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 i4{ /
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。