#include "stdafx.h" sIuk
tt=?*n
#include <iostream> H'myd=*h~8
#include <fstream> GS |sx
#include <sstream> T`g.K6$b
#include <iterator> fI%+
using namespace std; *uR&d;vg.8
(~/VP3.S
int main(int argc, char* argv[]) NiU}A$U
{ _S:6;_bz
ifstream ifs("test.txt"); !1f8~"Z
if(!ifs) z`-?5-a]I
return false; +zxj-diM
u,0N[.&N
ostringstream oss; 2Mc/ah
istream_iterator<char> inpos(ifs); <dx
xXzLT
istream_iterator<char> endpos; _//)|.6c3
ostream_iterator<char> out(oss); bWv4'Y!p
std::copy(inpos, endpos, out); -If-c'"G
string& szData = oss.str(); DSY:aD!
U^4
/rbQ
const char * cc = szData.c_str(); SCl$+9E
// cout << (long)szData << endl; N9r}nqCN
// cout << (long)oss.str().c_str() << endl; :+ef|,:`/
cout<< cc; lkf(t&vL2
~je#gVoUR
return 0; JGPLVw
} 3 $;6pY
YV*s1t/
注意以上代码中红色部分没有写成: -f0Nb+AR
const char * cc = oss.str().c_str(); // error jR@j+p^e
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 X>mY`$!/
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。