#include "stdafx.h" hO> q|+mC
Yf[Cmn
#include <iostream> $G0e1)D
#include <fstream> %9zpPrWF
#include <sstream> DmgDhNXKq
#include <iterator> lv]U)p
using namespace std; .=}\yYGe
{@Lun6\
int main(int argc, char* argv[]) +~F>:v?Rh
{ .mrv"k\<
ifstream ifs("test.txt"); $ H@
if(!ifs) oAN,_1v)
return false; ~-sgk"$
ozS'n]8*
ostringstream oss; S`[(y?OF?
istream_iterator<char> inpos(ifs); 2IHS)kkT|
istream_iterator<char> endpos; L=#B>Eu
ostream_iterator<char> out(oss); s'tXb=!HO
std::copy(inpos, endpos, out); H{E(=S
string& szData = oss.str(); tAjT-CXg
![{/V,V]~
const char * cc = szData.c_str(); \l0!si
// cout << (long)szData << endl; ^WWr8-
// cout << (long)oss.str().c_str() << endl; s +S6'g--
cout<< cc; W)Y-^i5
#('R`~
return 0; &Pv$nMB$I
} ^K[xVB(&
]Y?ZUSCJ
注意以上代码中红色部分没有写成: -|#/KKF
const char * cc = oss.str().c_str(); // error JK{2hr_a
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 O
'#FVZ.g
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。