#include "stdafx.h" ;,C]WZ.w
{PcJuRTHB
#include <iostream> M[gL7-%w\
#include <fstream> <"J]u@|
#include <sstream> dy&UF,l6
#include <iterator> 7l=;I %
using namespace std; [/UchU]DT
w{6C4~0
int main(int argc, char* argv[]) Wc[,kc
{ a/,>fv9;$
ifstream ifs("test.txt"); akxNT_
if(!ifs) Y8\P"qb
return false; /,I cs
.mt%8GM
ostringstream oss; g4$(%]
istream_iterator<char> inpos(ifs); n%s%i-[5B
istream_iterator<char> endpos; \A"o[A2v
ostream_iterator<char> out(oss); by
X!,
std::copy(inpos, endpos, out); %, kP_[!>Q
string& szData = oss.str(); rNii,_
FM >ae-L-
const char * cc = szData.c_str(); [d6!
// cout << (long)szData << endl; jC9us>b
// cout << (long)oss.str().c_str() << endl; Xq*^6*E-}
cout<< cc; o@Oz
a
^Tm`motzh
return 0; Ki\.w~Qs
} *h!fqT%9
_U<fS
注意以上代码中红色部分没有写成: /|1p7{km
const char * cc = oss.str().c_str(); // error QEhn
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 VThr]$2Y
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。