#include "stdafx.h" 4!l%@R>O2
EG7.FjnVu
#include <iostream> B1u.aa$
#include <fstream> v`G [6Z
#include <sstream> =!V-V}KK-
#include <iterator> p+ki1!Ed
using namespace std; vrGx<0$
a7Xa3 vlpO
int main(int argc, char* argv[]) (**k4c,
{ oP%'8%tk
ifstream ifs("test.txt"); eHIsTL@Fp
if(!ifs) <k c9KE
return false; `~+1i5-}
bb@3%r|_<
ostringstream oss; WxgA{q7:
istream_iterator<char> inpos(ifs); JSCZX:5
istream_iterator<char> endpos; ;7
F'xz"
ostream_iterator<char> out(oss); Klv~#9Si
std::copy(inpos, endpos, out); JX $vz*KF
string& szData = oss.str(); x5Z(_hU
*#
7 1aZ
const char * cc = szData.c_str(); S.E'fc1
// cout << (long)szData << endl; [VL+X^
// cout << (long)oss.str().c_str() << endl; ~HM,@5dFC
cout<< cc; HOY@<'
ywCF{rRd
return 0; ]ssX,1#Xh
} K'DRX85F
}Q<cE$c
注意以上代码中红色部分没有写成: C8oAl3d+h
const char * cc = oss.str().c_str(); // error :krdG%r
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 C5ia9LpRX
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。