#include "stdafx.h" 6j|Ncv
"u^Erj# /
#include <iostream> .]vb\NBK7
#include <fstream> 3}H{4]*%_
#include <sstream> ;_bRq:!j;
#include <iterator> Uqel
UL}
using namespace std; wb.yGfJ
_aFe9+y
int main(int argc, char* argv[]) {cs>Sy
4
{ M~2Us{ `
ifstream ifs("test.txt"); x
[]ad"R
if(!ifs) 4^W!,@W
return false; Ku,wI86
dun`/QKV
ostringstream oss; U*C^g}iA
istream_iterator<char> inpos(ifs); d0 )725Ia
istream_iterator<char> endpos; r/sSkF F
ostream_iterator<char> out(oss); GI]\
std::copy(inpos, endpos, out); sv=U^xI
string& szData = oss.str(); KHAc!4lA
~!Nj DDk
const char * cc = szData.c_str(); fmuh9Z
// cout << (long)szData << endl; "A}sD7xy9
// cout << (long)oss.str().c_str() << endl; 6'^E
],:b
cout<< cc; ;TJpD0
L(;$(k-/(
return 0; O{l4 f:51
} zTa5N
x:FZEyalG
注意以上代码中红色部分没有写成: * 1;4&/93o
const char * cc = oss.str().c_str(); // error B"_O!
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 |HmY`w6*z
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。