#include "stdafx.h" rZBOWT
iqj
ZC80
#include <iostream> I3ZbHb-)_,
#include <fstream> >^Zyls
#include <sstream> )~X*&(7RR}
#include <iterator> O]Mz1 ev|
using namespace std; 4&c7^ 4w~
Tpv]c
int main(int argc, char* argv[]) 1li1&
{ cNd2XQB9=
ifstream ifs("test.txt"); n^7$ST#'bV
if(!ifs) 4l~0LdYXKm
return false; xgeKz^,
zkt+"P{az[
ostringstream oss; #' =rv
istream_iterator<char> inpos(ifs); ;|e6Qc9
istream_iterator<char> endpos; EFgs}BV_9
ostream_iterator<char> out(oss); ;uC +5g`
std::copy(inpos, endpos, out); +'NiuN
string& szData = oss.str(); @fH?y Z=>
kM`!'0kt
const char * cc = szData.c_str(); !y>MchNv
// cout << (long)szData << endl; \5wC&|WEB
// cout << (long)oss.str().c_str() << endl; {|jG_
cout<< cc; z mxrz[
!1H\*VM"
return 0; 9x~qcH%
} DfCo=
AF
qut
注意以上代码中红色部分没有写成: +r+H`cT@
const char * cc = oss.str().c_str(); // error b7:B[7yK.x
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 I+Q`i:\,q
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。