#include "stdafx.h" ?+n&hHRg
i
Y*o;z,~
#include <iostream> Jq$_=X&
#include <fstream> +YkW[a\4
#include <sstream> i_=?eUq%q/
#include <iterator> F#1 Kk#t
using namespace std; 1l+kO,X]
Z'Exw-ca
int main(int argc, char* argv[]) ACigeK^C}E
{ d&|z=%9xl
ifstream ifs("test.txt"); v7;J%9=0D`
if(!ifs) ;%u_ ;,((
return false; Dxt),4%P
+Y>"/i.
N
ostringstream oss; [eNkU">}
istream_iterator<char> inpos(ifs); |rHG%VnBH
istream_iterator<char> endpos; _8Nw D_"
ostream_iterator<char> out(oss); 1Xy8|OFc[
std::copy(inpos, endpos, out); M3Khc#5S(
string& szData = oss.str(); P+dA~2k
Y=vVxVI\
const char * cc = szData.c_str(); B;Xoa,
// cout << (long)szData << endl; ItI0x
// cout << (long)oss.str().c_str() << endl; +@emX$cFV
cout<< cc; ME$2P!o
A*8m8Sh$
return 0; yo\N[h7
} EBoGJ_l
b
, juF2
注意以上代码中红色部分没有写成: M{?zvq?d
const char * cc = oss.str().c_str(); // error DX}B0B
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ;rB6u_5"I.
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。