#include "stdafx.h" kwMuL>5
^6#FqK+{u
#include <iostream> S9<J\`FG
#include <fstream> -dsB@nPiUw
#include <sstream> 2WIL0Siwl
#include <iterator> Pr{? A]dQ
using namespace std; xYc)iH6&
- 6;0 x
int main(int argc, char* argv[]) Z}T<^
F
{ L^KGY<hp4
ifstream ifs("test.txt"); O}MY:6Pe
if(!ifs) _Hl[Fit<j1
return false; Y]{<IF:
v{i'o4
ostringstream oss; !(*mcYA*W
istream_iterator<char> inpos(ifs); gq*- v:P>
istream_iterator<char> endpos; Rs_@L}U..
ostream_iterator<char> out(oss); R/waWz\D
std::copy(inpos, endpos, out); %'kaNpBz
string& szData = oss.str(); Ht5 %fcD
Qpndi$2H!
const char * cc = szData.c_str(); PYkcGtVa_
// cout << (long)szData << endl; -i V&-oP
// cout << (long)oss.str().c_str() << endl; }el.qZ
cout<< cc; e7t).s)b{
>1`FRw<
return 0; P1vr}J
} @4B+<,i
VW<s_
注意以上代码中红色部分没有写成: !X(Lvt/
const char * cc = oss.str().c_str(); // error ;/N[tO?Q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 <t,uj.9_
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。