#include "stdafx.h" b
r)o Sw
S .rT5A[
#include <iostream> -6MgC9]
#include <fstream> OpY2Z7_
#include <sstream> 9+.0ZP?
#include <iterator> e*uaxh+7
using namespace std; GZ\;M6{oh
wJJ4F$"b
int main(int argc, char* argv[]) F\+wM*:U
{ p5^,3&
ifstream ifs("test.txt"); QthHQA
if(!ifs) 80cBLGG
return false; Vb06z3"r
\pZ,gF;y
ostringstream oss; _3h(R`VdWO
istream_iterator<char> inpos(ifs); m;{_%oQ;
istream_iterator<char> endpos; s
bd;Kn
ostream_iterator<char> out(oss); (7x5
std::copy(inpos, endpos, out); Rd;k> e
string& szData = oss.str(); !o 2"th
bL
(g$Yi
const char * cc = szData.c_str(); [AQ6ads)
// cout << (long)szData << endl; z
%` \p
// cout << (long)oss.str().c_str() << endl; u&`7 C
cout<< cc; +Y,>ftN
&TE=$a:d&
return 0; ivC1=+
} zJ7vAL
.&.j?kb
注意以上代码中红色部分没有写成: 6GG&mqr+
const char * cc = oss.str().c_str(); // error EtJyI&7VK
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 :kq J~
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。