#include "stdafx.h" p@O Ip
SW%}S*h
#include <iostream> )C"ixZ>2xQ
#include <fstream> sCw>J#@2>
#include <sstream> h! uyTgq
#include <iterator> Wu*
4r0
using namespace std; bD=H$)
L4B/
g)K
int main(int argc, char* argv[]) 05{}@tW-
{ XYR
q"{Id
ifstream ifs("test.txt"); k62s|VeU
if(!ifs) $)@D(m,ybd
return false; @;Jv/N6@
st* sv}
ostringstream oss; u=Ik&^v
Wq
istream_iterator<char> inpos(ifs); 1#cTk
istream_iterator<char> endpos; 'm`}XGUBS
ostream_iterator<char> out(oss);
3#$X
std::copy(inpos, endpos, out); 5?HwM[`
string& szData = oss.str(); 6)0.q|Q
_BA; H+M
const char * cc = szData.c_str(); )V~=B]
// cout << (long)szData << endl;
:QP1!
// cout << (long)oss.str().c_str() << endl; L3HC-
cout<< cc; z/"*-+j
vGlVr.)
return 0; 7'esJ)2
} k
L6s49
"[P3b"=gW
注意以上代码中红色部分没有写成: q/zU'7%@
const char * cc = oss.str().c_str(); // error (_4DZMf
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Y!oLNGY
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。