#include "stdafx.h" J]0#M:w&
JdHc'WtS!|
#include <iostream> b {5|2&=
#include <fstream> "!tB";n
#include <sstream> RtL<hD
#include <iterator> B<LavX>F
using namespace std; + LwoBn>6
D$cMPFa2Nt
int main(int argc, char* argv[]) M\&~ Dmd
{
%\cC]<>
ifstream ifs("test.txt"); 4Le5Ms/
if(!ifs) OK\%cq/U
return false; co3 ,8\N0
)9r%% #
ostringstream oss; 1Q5<6*QL"
istream_iterator<char> inpos(ifs); dx}/#jMa
istream_iterator<char> endpos; IJ8DN@w9
ostream_iterator<char> out(oss); :RsPGj6
std::copy(inpos, endpos, out); cPcV[6)5K9
string& szData = oss.str(); ?/(K7>`
?C:fP`j:
const char * cc = szData.c_str(); Z?.*.<"Sj
// cout << (long)szData << endl; v+#j>
// cout << (long)oss.str().c_str() << endl; dYd~9
cout<< cc; {*<C!Qg
bJm0
return 0; ~ ""MeaM8[
} q4i8Sp>
j6vZ{Fx;w
注意以上代码中红色部分没有写成: $:[BB,$
const char * cc = oss.str().c_str(); // error 0*?XQV@
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 yV/ J(
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。