#include "stdafx.h" vR*p1Kq:
N:~CN1
#include <iostream> Ng|c13A=
#include <fstream> ;/ASl<t,
#include <sstream> OOZxs?pR
#include <iterator> s_#6^_
using namespace std; a?1Ml>R6P
'bn$"A"{o
int main(int argc, char* argv[]) A Qm!7,
{ ~djHtd>
ifstream ifs("test.txt"); *IQQsfL)
if(!ifs) ]US
return false; pE381Cw
?.Lq`~T`
ostringstream oss; }s@vN8C
istream_iterator<char> inpos(ifs); A;Av0@w
istream_iterator<char> endpos; #u/5
nm
ostream_iterator<char> out(oss); s`I]>e
std::copy(inpos, endpos, out); Btyp=wfN[
string& szData = oss.str(); t7 +U!
?!a8'jfs
const char * cc = szData.c_str(); d7P'c!@+
// cout << (long)szData << endl; BI6]{ ZC"
// cout << (long)oss.str().c_str() << endl; "@(Sw>*o
cout<< cc; \\Te\l|L
YckLz01jh
return 0; )R6-]TkA_
} $0&<Jx
xz3|m
_)
注意以上代码中红色部分没有写成: H: ]'r5sw
const char * cc = oss.str().c_str(); // error fb?YDM
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 0JU+v:J[=
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。