#include "stdafx.h" Bam.B6-
{L7Pha
#include <iostream> *mp:#'
#include <fstream> $5 mGYF]
#include <sstream> 3Jizv,?
#include <iterator> SqPqL<,e
using namespace std; &@oI/i&0B
]j>xQm\
int main(int argc, char* argv[]) uK" T~
{ $\J5l$tU
ifstream ifs("test.txt"); q x)\{By
if(!ifs)
QvZ"{
return false; FJtmRPP[r
_`?cBu`
ostringstream oss; 1*hE bO
istream_iterator<char> inpos(ifs); _dd! nU\A|
istream_iterator<char> endpos; .>R`#@+I
ostream_iterator<char> out(oss); 8)9-*Bzj
std::copy(inpos, endpos, out); YXWDbr:JX
string& szData = oss.str(); ,M3hE/rb/
O00;0w u
const char * cc = szData.c_str(); i&>^"_4rc
// cout << (long)szData << endl; -fA =&$V
// cout << (long)oss.str().c_str() << endl; ({t^/b*8
cout<< cc; P".}Y[GD
vK)'3%
return 0; Zo&i0%S\E
} yk?bz
R%RbC!P
注意以上代码中红色部分没有写成: ZcXAqep8'
const char * cc = oss.str().c_str(); // error T4.wz
58
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ;99oJD,
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。