#include "stdafx.h" P_*" dza
Urr@a/7
#include <iostream> (O.d>
#include <fstream> v7iuL6jl
#include <sstream> j)<IRD^
#include <iterator> >zXsNeGQR
using namespace std; &6ZD136
BYVY)<v/
int main(int argc, char* argv[]) q,93nhs "
{ *X+79vG:
ifstream ifs("test.txt"); }a/x._[s
if(!ifs) -uMSe~
return false; L.S;J[a;
" @v <Bk
ostringstream oss; xI($Uu}S
istream_iterator<char> inpos(ifs); /5Oa,NS7
istream_iterator<char> endpos; 1*9U1\z
ostream_iterator<char> out(oss); }]lr>"~y}
std::copy(inpos, endpos, out); d$ x"/A]<
string& szData = oss.str(); gm igsXQ
Z
-W(l<
const char * cc = szData.c_str(); >[*8I\*@n
// cout << (long)szData << endl; {L/ tst#C
// cout << (long)oss.str().c_str() << endl; 05b_)&4R
cout<< cc; A v2 08}Y
jRJn+
return 0; 0n;<
ge&~R
} ;" dV"W
-f% '
注意以上代码中红色部分没有写成: a&c6.#E{y
const char * cc = oss.str().c_str(); // error 60J;sGW
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 c'%-jG)\
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。