#include "stdafx.h" H].y w9
a`Qot
#include <iostream> &[mZD,
#include <fstream> Y.#:HRtgW
#include <sstream> p,g1eb|E
#include <iterator> ^L4Qbc(vJ
using namespace std; ~X(UcZ2
,"0)6=AE
int main(int argc, char* argv[]) >gll-&;t
{ siDh="{s
ifstream ifs("test.txt"); 13'vH]S$M
if(!ifs) $
<8~k^
return false; OFkNl}D
YcX/{L[9o
ostringstream oss; Ter:sge7
istream_iterator<char> inpos(ifs); zvc`3
istream_iterator<char> endpos; 'J)2g"T@
ostream_iterator<char> out(oss); =:,xxqy
std::copy(inpos, endpos, out); e-hjC6Q U
string& szData = oss.str(); a&{X!:X
q=Zr>I;(Ks
const char * cc = szData.c_str(); mog[pu:!,
// cout << (long)szData << endl; x`RTp:#
// cout << (long)oss.str().c_str() << endl; >O9o,o/6R
cout<< cc; ]q5`YB%_
3uu~p!2
return 0; <bck~E
} fU3`v\X
7}O.wUKw%
注意以上代码中红色部分没有写成: D#A~Nbc
const char * cc = oss.str().c_str(); // error &)F*@C-
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 {Rq1HH
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。