#include "stdafx.h" `4
UlJ4<`
f=`33m5
#include <iostream> G{RTH_p
#include <fstream> Mw^*yW
#include <sstream> ]V<-J
#include <iterator> J%Mnjk^_\S
using namespace std; 'RTtE
@6&JR<g*t
int main(int argc, char* argv[]) ;h~er6&
{ H}nJbnU
ifstream ifs("test.txt"); AhxGj+
if(!ifs) nl
n OwyMJ
return false; #w>~u2W
9.&mz}q
ostringstream oss; fz}?*vPW
istream_iterator<char> inpos(ifs); "!Lkp2\
istream_iterator<char> endpos; :a3xvN-l
ostream_iterator<char> out(oss); G7-!`-Nk
std::copy(inpos, endpos, out); T*CME]
string& szData = oss.str(); Gt~JA0+C)7
u~F~cDu
const char * cc = szData.c_str(); Eg8i _s~:
// cout << (long)szData << endl; s-?fUqA
// cout << (long)oss.str().c_str() << endl; m22wF>9
cout<< cc; Qn=$8!Qqa
ndi+xaQtG
return 0; K)[8 H~Lm
} IR$(_9z
NL!9U,h5|
注意以上代码中红色部分没有写成: NK/4OAt%
const char * cc = oss.str().c_str(); // error wss?|XCI
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 SUE
~rb
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。