#include "stdafx.h" =XyK/$
G^oBu^bq~
#include <iostream> ]w! x
#include <fstream> 9fyk7~V
#include <sstream> /1t(e._
#include <iterator> |fq1Mn8
using namespace std; #;>J<>
Rm"lRkY4I[
int main(int argc, char* argv[]) g,mcxXO
{ Z=4Krfn
ifstream ifs("test.txt"); NC|&7qQ
if(!ifs) R7( + ^%
return false; ,~%Qu~\
QV7K~qi
ostringstream oss; hP,SvN#!2
istream_iterator<char> inpos(ifs); tk2B\}6
istream_iterator<char> endpos; ct fKxGH
ostream_iterator<char> out(oss); Ond"Eq=r
std::copy(inpos, endpos, out); _~fO8_vr
string& szData = oss.str(); 3Ud&B
':kBHCR7
const char * cc = szData.c_str(); !G Z2|~f9
// cout << (long)szData << endl; u3w `(3{<
// cout << (long)oss.str().c_str() << endl; a|
cout<< cc; B$_F)2%m;
p;U[cGHC
return 0; E&jngxlN
} &>p2N
coiTVDwA
注意以上代码中红色部分没有写成: }Sqey:9jH
const char * cc = oss.str().c_str(); // error [AfV+$
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 _T<ney}Y<
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。