#include "stdafx.h" Nh01NY;
58t_j54
#include <iostream> \Ez&?yb/
#include <fstream> '=+gweM
#include <sstream> M4n0GWHLy
#include <iterator> Cb6K!5[q]
using namespace std; *qJHoP;
b5#Jo2C`AJ
int main(int argc, char* argv[]) kpRk.Q*
{ )43z(:<
ifstream ifs("test.txt"); b
w!
if(!ifs) J^=Xy(3e
return false; ;v!Ef"E|cV
gDjAnz#
ostringstream oss; gL&)l!2Y
istream_iterator<char> inpos(ifs); (~NR."s;
istream_iterator<char> endpos; w5vzj%6i
ostream_iterator<char> out(oss); QBCEDv&j
std::copy(inpos, endpos, out); H~?7:K
string& szData = oss.str(); iX6*OEl/Q
mYqLqezAA
const char * cc = szData.c_str(); fRwr}n'
// cout << (long)szData << endl; T5-Yqz
// cout << (long)oss.str().c_str() << endl; \"X_zM
cout<< cc; y:Ag mr,S
w^ X@PpP
return 0; gX`C76P!
} hGI5^!Cq
L/)eNZ
注意以上代码中红色部分没有写成: FzF#V=9lP
const char * cc = oss.str().c_str(); // error SB:z[kfz|
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 BO+to.
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。