#include "stdafx.h" :wEy""*N0
`4?|yp.|L
#include <iostream> 7{l~\]6d
#include <fstream> _[Sh`4`r
#include <sstream> C9_[ke[1D
#include <iterator> cj^hwtx
using namespace std; CMyz!jZ3
Q5l+-
int main(int argc, char* argv[]) .|Yn[?(
{ !]5V{3
ifstream ifs("test.txt"); ?*[35XUd
if(!ifs) ;JMmr-@
return false; bvHQ #:}H
Jw>na _FJ
ostringstream oss; ?G<?:/CU
istream_iterator<char> inpos(ifs); (Q&O'ng1
istream_iterator<char> endpos; |f\WVGH
ostream_iterator<char> out(oss); F@#p
std::copy(inpos, endpos, out); 6'x3g2C/
string& szData = oss.str(); #_|O93HN'
HIt9W]koO
const char * cc = szData.c_str(); K r<UPr
// cout << (long)szData << endl; V6h8+|hK
// cout << (long)oss.str().c_str() << endl; ]"?<y s
cout<< cc; 1*'gaa&y
rQ6>*0xL_
return 0; Rlm28
} FFe{=H,=
#/8
Nav
注意以上代码中红色部分没有写成: B52dZ b
const char * cc = oss.str().c_str(); // error :7 JP(j2
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 \m1^sFMZ
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。