#include "stdafx.h" U I C? S
3:1
c_
#include <iostream> >N-%
#include <fstream> 4sjr\9IDC
#include <sstream>
+;;%Atgn
#include <iterator>
}8 _9V|E
using namespace std; 8[;oUVb5
(B<AK4G
int main(int argc, char* argv[]) KTt$Pt/.
{ Xkom@F~]
ifstream ifs("test.txt"); (14kR
if(!ifs) B}+9U
return false; &Q>'U6"%
nD\os[ 3
ostringstream oss; [dlH
t;S
istream_iterator<char> inpos(ifs); J|S^K kC
istream_iterator<char> endpos; mcr#Ze
ostream_iterator<char> out(oss); 3ohcHQ/a
std::copy(inpos, endpos, out); ( y*X8
string& szData = oss.str(); !#1A7[WN
ZGhoV#T@
const char * cc = szData.c_str(); %+a@|Z
// cout << (long)szData << endl; mX@*2I
// cout << (long)oss.str().c_str() << endl; K- C-+RB
cout<< cc; [[h)4H{T
389.&`Q%Ut
return 0; a] =\h'S
} 9t.yP;j\Y
jSp&mD*xv
注意以上代码中红色部分没有写成: M l?)Sc"\7
const char * cc = oss.str().c_str(); // error PRC)GP&q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 /? 1Yf
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。