#include "stdafx.h" @OL3&R
Qre&N_
#include <iostream> p=5H^E m1
#include <fstream> MAhPO!e5.
#include <sstream> $R#L@iL-
#include <iterator> 8@C|exAD`
using namespace std; gt~2Br4
`LHfAXKN
int main(int argc, char* argv[]) 4sD:J-c
{ +M%2m3.Jo
ifstream ifs("test.txt"); !v;_@iW3e
if(!ifs) h,jAtL!
return false; q-)_Qco
"OAZ<
ostringstream oss; kviSQM2
istream_iterator<char> inpos(ifs); x[uXD
istream_iterator<char> endpos; kk7:A0._
ostream_iterator<char> out(oss); ~X(xa
std::copy(inpos, endpos, out); w!9W Cl]9M
string& szData = oss.str(); "l;8
O2;g
xTawG?"D
const char * cc = szData.c_str(); >yHnz?bf@
// cout << (long)szData << endl; 7|eSvC
// cout << (long)oss.str().c_str() << endl; +Q#Qu0_
cout<< cc; _w,0wn9N$
Ak-7}i
return 0; >mDubP
} '!L1z45
ob5nk^y
注意以上代码中红色部分没有写成: I!0+RP(
const char * cc = oss.str().c_str(); // error GpQF* x
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 EYD{8Fw-
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。