#include "stdafx.h" qnB<k,8T
I>PZYh'.T
#include <iostream> veeI==]
#include <fstream> WRWWskP
#include <sstream> 4&QUh+F
#include <iterator> [J^
using namespace std; Cyq?5\ a
&FSmqE;@^
int main(int argc, char* argv[]) m9in1RI%
{ pkJ/oT
ifstream ifs("test.txt"); 57wFf-P
if(!ifs) {;s;.
return false; AS)UJ/lC
,57$N&w
ostringstream oss; =;0wFwSz
istream_iterator<char> inpos(ifs); !b8uLjd;
istream_iterator<char> endpos; YEv%C|l
ostream_iterator<char> out(oss); <$%X<sDkq
std::copy(inpos, endpos, out); -$(Jk<
string& szData = oss.str(); jMM$ d,7B
E@-ta):
const char * cc = szData.c_str(); bLzs?eos
// cout << (long)szData << endl; Mi+H#xx16
// cout << (long)oss.str().c_str() << endl; 0Vkl`DmeM.
cout<< cc; e ^Ds
'Gx$Bj
return 0; NYwR2oX
} G8nrdN-9
q2hFOm
注意以上代码中红色部分没有写成: ';0 qj$#
const char * cc = oss.str().c_str(); // error A4.4Dji,x
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 *O,H5lwU
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。