#include "stdafx.h" llq<egZpm
-).C
#include <iostream> 6ujWNf
#include <fstream> \fOEqe*5SM
#include <sstream> Rq -ZL{LR7
#include <iterator> wYea\^co
using namespace std; F ,kZU$
).O)p9
int main(int argc, char* argv[]) *. t^MP
{ ?ub35NLa
ifstream ifs("test.txt"); P55fL-vo|}
if(!ifs) UKGPtKE<
return false; C!gZN9-
" bG2:
ostringstream oss; *CMx- _
istream_iterator<char> inpos(ifs); ;uW FHc5@B
istream_iterator<char> endpos; Z+SRXKQ
ostream_iterator<char> out(oss); %T[]zJ(
std::copy(inpos, endpos, out); ZSw.U:ep$s
string& szData = oss.str(); _1^'(5f$
/Oono6j
const char * cc = szData.c_str(); H,J8M{
// cout << (long)szData << endl; !D6]JPX
// cout << (long)oss.str().c_str() << endl; =4!mAo}
cout<< cc; 9WHddDA
}H4RR}g
return 0;
kAx4fE[c
} bt *k.=p
ICCc./l|
注意以上代码中红色部分没有写成: #ob/p#k
const char * cc = oss.str().c_str(); // error a*;b^Ze`v
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 t^HRgY'NjM
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。