#include "stdafx.h" G+X[R^RD
2C]la
#include <iostream> %SO%{.}Zf
#include <fstream> <uKm%~xi<
#include <sstream> T|s0qQi
#include <iterator> 71" JL",
using namespace std; ERRT_G?
53t-'K0l
int main(int argc, char* argv[]) 8{<[fZyC
{ [&qbc#L
ifstream ifs("test.txt"); a950M7
if(!ifs) iQ{&&>V%
return false; *Z]WaDw
/4
LR0`A'
ostringstream oss; 42>m,fb2[
istream_iterator<char> inpos(ifs); iqednk%
istream_iterator<char> endpos; [x<6v}fRn
ostream_iterator<char> out(oss); OW^2S_H5
std::copy(inpos, endpos, out); iE^a%|?}
string& szData = oss.str(); V}|v!h[O8
zYG,x*IH
const char * cc = szData.c_str(); "8muMa8Q%
// cout << (long)szData << endl; IiK(^:~%
// cout << (long)oss.str().c_str() << endl; 90qj6.SQ
cout<< cc; yLz,V}
v^c<`i;
return 0; z34>,0
} ^~6] 0$yJ
#xP!!.DF(
注意以上代码中红色部分没有写成: !b]2q%XM
const char * cc = oss.str().c_str(); // error M=AvD(+ha
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 U7"BlT!V\
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。