#include "stdafx.h" rouaT
d*LW32B@
#include <iostream> 0\wW%3C
#include <fstream> .i3_D??
#include <sstream> xC 4L`\
#include <iterator> m(^nG_eX
using namespace std; 2I_~]X53[
:CP,DO
int main(int argc, char* argv[]) ka*#O"}L8
{ }`+9ie7]/
ifstream ifs("test.txt"); Cq}E5M
if(!ifs) yXCHBz 6&
return false; %0%Tp
tcJN`N
ostringstream oss; jaQH1^~l/-
istream_iterator<char> inpos(ifs); 1;~|[C
istream_iterator<char> endpos; HnKXO
ostream_iterator<char> out(oss); QVkrhwp
std::copy(inpos, endpos, out); e. R9:
string& szData = oss.str(); {n(/ c33
9`7>"[=P
const char * cc = szData.c_str(); IJD E{)
// cout << (long)szData << endl; >LW}N!IBy
// cout << (long)oss.str().c_str() << endl; ~P'i
/*:
cout<< cc; "-Wb[*U;
f7&9IW`7F^
return 0; =OFx4#6a
} 4-oaq'//BT
x!n8Wx
注意以上代码中红色部分没有写成: ]$I}r=
Em
const char * cc = oss.str().c_str(); // error /z: mi
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 =G`g-E2
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。