#include "stdafx.h" PR&D67:Jy
&I[ITp6y0
#include <iostream> 7Y8 B \B)w
#include <fstream> owA0I'|V-A
#include <sstream> {GaQV-t
#include <iterator> a-`OE"
using namespace std; is3nLm(
%PsDS
int main(int argc, char* argv[]) eBK s-2r
{ 4E Hb
ifstream ifs("test.txt"); gAx8r-` `
if(!ifs) U2 tsHm.O
return false; -*?Y4}mK
I)$of9
ostringstream oss; ^GXy:S$
istream_iterator<char> inpos(ifs); .>(?c92
istream_iterator<char> endpos; $ljgFmR_
ostream_iterator<char> out(oss); ?|i6]y=D
std::copy(inpos, endpos, out); /f_c?|
string& szData = oss.str(); J.`z;0]op
-zeodv7
const char * cc = szData.c_str(); j15TavjGh
// cout << (long)szData << endl; X9:(}=E
V
// cout << (long)oss.str().c_str() << endl; &wZ ggp
cout<< cc; xLE+"6;W
U`j[Ni}"
return 0; CIM9~:\
} 8e'0AI_>
ZOFhX$I
注意以上代码中红色部分没有写成: !lSxBr[dQ
const char * cc = oss.str().c_str(); // error c=YJ:&/5&
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 b&$ ?.z
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。