#include "stdafx.h" .3&a{IxM]
+ sywgb)
#include <iostream> A,-V$[;~D
#include <fstream> yw.~trF&%
#include <sstream> ^0~c7`k`V
#include <iterator> z_Wm
HB
using namespace std; YWRE&MQ_
$xA J9_2P
int main(int argc, char* argv[]) _2m[(P9d
{ w3<"g&n|
ifstream ifs("test.txt"); Ni!;-,H+E
if(!ifs) UXwB$@8
return false; z$c&=Q
,rZn`9
ostringstream oss; c.(Ud`jc
istream_iterator<char> inpos(ifs); HkdN=q
istream_iterator<char> endpos; GG_^K#*
ostream_iterator<char> out(oss);
!@pV)RUv7
std::copy(inpos, endpos, out); #dZ/UM(u
string& szData = oss.str(); \5Vp6^
&nqdl+|G*
const char * cc = szData.c_str(); .]j#y9>&w%
// cout << (long)szData << endl; 9fP) Fwih
// cout << (long)oss.str().c_str() << endl; CF|moc:;
cout<< cc; j|[(*i%7|
G@!_ZM8h
return 0; ADYx.8M|9i
} N7*CP|?E
'Aj(i/CM
注意以上代码中红色部分没有写成: 3@^>#U
const char * cc = oss.str().c_str(); // error fJLf7+q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 psIkG0
&
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。