#include "stdafx.h" e"}JHXs
Lk%`hsv
#include <iostream> CFE ubEb
#include <fstream> &T.d"i
#include <sstream> A]0A,A0
#include <iterator> !8g419Yg
using namespace std; hcn$uyP
?^Gi;d5
int main(int argc, char* argv[]) ')R+Z/hG.
{ w8=&rzr8
ifstream ifs("test.txt"); Vn&{yCm3
if(!ifs) cp1-eR_&
return false; f^JiaU4 [
l7h6R$7; 0
ostringstream oss; mJxr"cwHl
istream_iterator<char> inpos(ifs); (vX)
<Z
!
istream_iterator<char> endpos; Zv]'9,cbk
ostream_iterator<char> out(oss); /esdtH$=
std::copy(inpos, endpos, out); oX=dJJE
string& szData = oss.str(); IRhi1{K$"
Xr:gm`[
const char * cc = szData.c_str(); is~"yE7
// cout << (long)szData << endl; #ovausK[7
// cout << (long)oss.str().c_str() << endl; ^VC/tJ
cout<< cc; # &,W x
1NAGGr00
return 0; Fqt,VED
} 18^#:=Z
l4s*+H$vd?
注意以上代码中红色部分没有写成: jKh:}yl4
const char * cc = oss.str().c_str(); // error }_/]f!]
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 xzi_u.iOP
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。