#include "stdafx.h" WYklS<B[
DYKJ Vn7w
#include <iostream> HKZD*E((
#include <fstream> s9'lw'
#include <sstream> <_~>YJ
#include <iterator> T2^0Q9E?
using namespace std; sHSD`mYq
U,w J8
int main(int argc, char* argv[]) {q-<1|xj/J
{ DlWnz-
ifstream ifs("test.txt"); w[S!U<9/
if(!ifs) `Z:5 E
return false; |3A/Og
~:\QC
ostringstream oss; TsB"<6@!AA
istream_iterator<char> inpos(ifs); gI SP .
istream_iterator<char> endpos; 6.!Cm$l
ostream_iterator<char> out(oss); =
UT^5cl(
std::copy(inpos, endpos, out); "5,tEP!
string& szData = oss.str(); LK1 r@
boJ
const char * cc = szData.c_str(); !F_BLHig
// cout << (long)szData << endl; %ur_DQ
// cout << (long)oss.str().c_str() << endl; )Uv lEG']
cout<< cc; IP]"D"
[8o!X)
return 0; ^gK8
u]>
} ;QA`2$Ow
!u0qF!/W
注意以上代码中红色部分没有写成: ]H4T80wm&
const char * cc = oss.str().c_str(); // error w,t>M_(N
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 _rz*7-ks=
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。