#include "stdafx.h" Xf[kI
>l']H*&B<
#include <iostream> 4T6 {Y
#include <fstream> IxZb$h[
#include <sstream> V)ig)(CT
#include <iterator> V!_71x\-Q
using namespace std; #%0Bx3uM
W~1~k{A
int main(int argc, char* argv[]) avQJPB)}Sb
{ CusF/>
ifstream ifs("test.txt"); as yZe
if(!ifs) {i0SS
return false;
]:M0Kj&h
H,unpZ(
ostringstream oss; I#F!N6;
istream_iterator<char> inpos(ifs); w8S!%abl1
istream_iterator<char> endpos; :Qt
ostream_iterator<char> out(oss); 8,P-
7^
std::copy(inpos, endpos, out); dP?Ge}
string& szData = oss.str(); fxaJZz$o
"hxN !,DEZ
const char * cc = szData.c_str(); HBS\<}
// cout << (long)szData << endl; 4`m~FNVS
// cout << (long)oss.str().c_str() << endl; G2bDf-1ew
cout<< cc; Mn1Pt|_@!
aT!'}GjL
return 0; O/s$SX%g
} d\{>TdyF
|1b_*G4|
注意以上代码中红色部分没有写成: yZr M.%V
const char * cc = oss.str().c_str(); // error IYn]U4P.
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 `]Fx.)C#
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。