#include "stdafx.h" $+n5l@W
xL|4'8
#include <iostream> xeSv+I-b
#include <fstream> 98%6Z8AS6U
#include <sstream> l)qGG$7$
#include <iterator> jO5Wemqf
using namespace std; {%8=qJ3@
{\5-b:#_
int main(int argc, char* argv[]) S %(R9N|
{ <xAlp;8m5
ifstream ifs("test.txt"); wb6$R};?
if(!ifs) e:(~=9}Li
return false; U/:x<Y$ tj
A[ N>T\
ostringstream oss; F
<.} q|b
istream_iterator<char> inpos(ifs); m@y_Wt
istream_iterator<char> endpos; 4(p,@e31
ostream_iterator<char> out(oss); :snn-e0l
std::copy(inpos, endpos, out); }>m3V2>[
string& szData = oss.str(); N4wMAT:h
&$. x1$%
const char * cc = szData.c_str(); y5:al7*P
// cout << (long)szData << endl; MJ~)CiKgN
// cout << (long)oss.str().c_str() << endl; `bEum3l\6]
cout<< cc; -P$E)5?^
Yd$64d7,h
return 0; N0fXO
} nXxSv~r
5h>t4 [~
注意以上代码中红色部分没有写成: /[Sy;wn
const char * cc = oss.str().c_str(); // error UdX aC= Q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 } bEu+bZ
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。