#include "stdafx.h" vSOO[.=
:oYz=c
#include <iostream> #s\HiO$BT
#include <fstream>
(SEE(G35
#include <sstream> aw\\oN*
#include <iterator>
xe~lV
using namespace std; .9cQq/{b
x?aNK$A~X
int main(int argc, char* argv[]) n7J6YtUwP
{ %z0;77[1 I
ifstream ifs("test.txt"); 2~*J<iO&l
if(!ifs) xksd&X:
return false; -&Cb^$.-x
6 cF~8
ostringstream oss; #GJ{@C3H8Q
istream_iterator<char> inpos(ifs); bc?\lD$$
istream_iterator<char> endpos; b6mSPH@
ostream_iterator<char> out(oss); >o]!-46
std::copy(inpos, endpos, out); R 2{ kS
string& szData = oss.str(); '@ $L}C#OI
BrHw02G
const char * cc = szData.c_str(); V>$A\AWw
// cout << (long)szData << endl; ?F^$4:
// cout << (long)oss.str().c_str() << endl; ]tjQy1M
cout<< cc; e2~$=f-
bvxol\7 ;
return 0; <Z nVWER
}
_i/x4,=xv
(mNNTMe
注意以上代码中红色部分没有写成: 0:CIM
const char * cc = oss.str().c_str(); // error <WHu</
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 A>?_\<Gp
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。