#include "stdafx.h" pMHF u/|Pr
;6eBfMhL
#include <iostream> /#WvC;B
#include <fstream> VV;%q3}:
#include <sstream> Rk,'ujc
#include <iterator> beaSvhPU
using namespace std; =t^jlb
%pIP#y[4
int main(int argc, char* argv[]) {E; bT|3z
{ .TMLg(2hgv
ifstream ifs("test.txt"); }*
\*<d
3
if(!ifs) ,ZghV1z
return false; [
*Dj7zt:
fat;5XL@
ostringstream oss; 3eg6 CdT
istream_iterator<char> inpos(ifs); f8
BZk h
istream_iterator<char> endpos; E!'6vDVC:
ostream_iterator<char> out(oss); [~PR\qm
std::copy(inpos, endpos, out); Ur]/kij
string& szData = oss.str(); 6P3h955c
I8a3: )
const char * cc = szData.c_str(); lEgjv,
// cout << (long)szData << endl; $xT9e
// cout << (long)oss.str().c_str() << endl; WkiPrQ0]:
cout<< cc; SJ91(K
Q^;:Kl.b
return 0; q{&\nCy
} (\D E1q
d~AL4~}
注意以上代码中红色部分没有写成: ta6>St7.
const char * cc = oss.str().c_str(); // error l\F71pwSI
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Nm
!~h|3
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。