#include "stdafx.h" "eKNk
P]V/<8o.53
#include <iostream> YT:])[gVV
#include <fstream> Gp*U2LB
#include <sstream> 7bcl^~lY
#include <iterator> ,c3gW2E
using namespace std; ^\|Hz\"*
tR`'( *wh
int main(int argc, char* argv[]) x@^Kd*fo
{ OJX* :Q
ifstream ifs("test.txt"); 2Cy">Exl
if(!ifs) |Uf[x[
return false; ZWJ%t'kF
4-ijuqjN
ostringstream oss; ~:h-m\=8Y
istream_iterator<char> inpos(ifs); *WS'C}T
istream_iterator<char> endpos; O [Q;[@
ostream_iterator<char> out(oss); o0SQJ1.a$
std::copy(inpos, endpos, out); #Z%?lx"Q0
string& szData = oss.str(); M@)^*=0H
@log=^
const char * cc = szData.c_str(); _Nze="Pt
// cout << (long)szData << endl; H|Vq
// cout << (long)oss.str().c_str() << endl; KBVW<;C$
cout<< cc; BEU^,r3z
Hzos$1DJ
return 0; Fh)`A5#
} HI+87f_Q
c{7<z9U
注意以上代码中红色部分没有写成: .Y@)3
const char * cc = oss.str().c_str(); // error w?u4-GT
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 H~fX>6>
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。