#include "stdafx.h" gyx4= 'Q
I,0Z* rw
#include <iostream> JAA{5@ST
#include <fstream> Ei&
Z
#include <sstream> &8^ch,+pD
#include <iterator> KfkE'_F
using namespace std; Dw-i!dq
6*Y>Y&sea
int main(int argc, char* argv[]) $hGiI
{ WG\gf\= I
ifstream ifs("test.txt"); V {H/>>k7
if(!ifs) `E4OgO
return false;
wn-{Vkpm
<xpHlLc
ostringstream oss; xO nW~Z
istream_iterator<char> inpos(ifs); ( /):
istream_iterator<char> endpos; ``j8T[g
ostream_iterator<char> out(oss); `x'vF#
std::copy(inpos, endpos, out); eo~>|0A*V
string& szData = oss.str(); v*UJ4r
LsGu-Y5^
const char * cc = szData.c_str(); G"._]3CPF
// cout << (long)szData << endl; tUR9ti
// cout << (long)oss.str().c_str() << endl; {6uh Ub
cout<< cc; TA~YCj$
60`4
_Uy]_
return 0; #FL\9RXy
} lAcXi$pF
R:}u(N
注意以上代码中红色部分没有写成: f} _d`?K
const char * cc = oss.str().c_str(); // error ; Da[jFP
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 sKLH.@
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。