#include "stdafx.h" N}*|*!6hI
[ Yzh(a8
#include <iostream> 4ZK8Y[]Lv
#include <fstream> LI&+5`
#include <sstream> 7O)U(<70
#include <iterator> h>6'M
using namespace std; Bk~lE]Q3c7
JRm:hf'
int main(int argc, char* argv[]) l(T CF
{ C
NNyz$
ifstream ifs("test.txt"); f3+@u2Pv
if(!ifs) ueiXY|
return false; Qn77ZpL:LJ
FX FTf2*T
ostringstream oss; 8-?.Q"D7%
istream_iterator<char> inpos(ifs); T>&d/$;]
istream_iterator<char> endpos; <.0-K_
ostream_iterator<char> out(oss); OgiElA.
std::copy(inpos, endpos, out); n0T\dc~
string& szData = oss.str(); B?nQUIb:
_M/ckv1q@
const char * cc = szData.c_str(); +oZq~2?*S6
// cout << (long)szData << endl; 3+<}Hm+
// cout << (long)oss.str().c_str() << endl; ;R E|9GR
cout<< cc; 9ZL3p!
_(}{=:M?
return 0; /3!KfG
} wjF/c
3%]%c6
注意以上代码中红色部分没有写成: gc 14 %
const char * cc = oss.str().c_str(); // error 4eym$UWw
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ThX%Uzd"[;
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。