#include "stdafx.h" Li}yK[\]
<=p"ck@
#include <iostream> FBe1f1
sm
#include <fstream> y<Z8+/f`f
#include <sstream> U`D"L4},.
#include <iterator> H&I0\upd
using namespace std; -k'=s{iy
~&g:7f|X
int main(int argc, char* argv[]) ZC05^
{ o9JJ_-O"
ifstream ifs("test.txt"); }a8N!g
if(!ifs) 3+IS7ATn
return false; ~{xY{qL
C0e<
_6p=
ostringstream oss; ~yci2{
istream_iterator<char> inpos(ifs); cOIshT1
istream_iterator<char> endpos; zZkwfF
ostream_iterator<char> out(oss); qk+:p]2
std::copy(inpos, endpos, out); `":< ]lj
string& szData = oss.str(); 'kp:yI7w
|>m@]s7Z
const char * cc = szData.c_str(); ?=6zgb"9-
// cout << (long)szData << endl; ezFyd 'P
// cout << (long)oss.str().c_str() << endl; zdtzR<X
cout<< cc; {R(q7ALR
o +&/ N-t
return 0; T2k5\r8
} }ZV$_
4!D!.t~r
注意以上代码中红色部分没有写成: o)w'w34FCT
const char * cc = oss.str().c_str(); // error g8^ $,
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 qz?9:"~$C
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。