#include "stdafx.h" (J*w./
MA+-2pMc|7
#include <iostream> r}\h\ {
#include <fstream> ?nZ <?
#include <sstream> z}1xy+
#include <iterator> ?*'$(}r3
using namespace std; -m160k3
4*vas]
int main(int argc, char* argv[]) iw
fp'
{ TJXraQK-=
ifstream ifs("test.txt"); gOyY#]g
if(!ifs) @LKG\zYBu
return false; vSYKe
eFSC^
ostringstream oss; e(#IewKp
istream_iterator<char> inpos(ifs); Tj=dL
istream_iterator<char> endpos; h_~|O[5|)
ostream_iterator<char> out(oss); 8A:^K:Q
std::copy(inpos, endpos, out); z"K(
bw6
string& szData = oss.str(); P!y`$Ky&
~B!O~nvdQ
const char * cc = szData.c_str(); T;4`wB8@
// cout << (long)szData << endl; *e<Eu>fW#&
// cout << (long)oss.str().c_str() << endl; T@|l@xm~L
cout<< cc; 6!B^xm.R @
Ao":9r[V
return 0; ~g1, !Wl
} yIIETE
KO|pJ3
注意以上代码中红色部分没有写成: ,k~j6Z
const char * cc = oss.str().c_str(); // error Hl3)R*&'J
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 lKEX"KQ!
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。