#include "stdafx.h" $vNz^!zgV
jseyT#2
#include <iostream> ! 6kLL
#include <fstream>
y{hy
#include <sstream> +{V"a<D$m
#include <iterator> <qD/ #$
using namespace std; J:
GzJLG=M
int main(int argc, char* argv[]) o9dqHm
{ Z^i=51
ifstream ifs("test.txt"); R u^v!l`!7
if(!ifs) C:qb-10|A
return false; =`f6@4H
jk-hIl&
ostringstream oss; tETT\y|'
istream_iterator<char> inpos(ifs); #%CbZw@hJ9
istream_iterator<char> endpos; Z:VqBqK
ostream_iterator<char> out(oss); {@1C,8n;
std::copy(inpos, endpos, out); [h
"*>J{
string& szData = oss.str(); d52l)8
VUXG%511T
const char * cc = szData.c_str(); uT8@p8
// cout << (long)szData << endl; t^HQ=*c
// cout << (long)oss.str().c_str() << endl; UUy%:t
cout<< cc; n:zoN2lC
i6R2R8
return 0; e0O2>w
} M_tY: v
v)|[=
注意以上代码中红色部分没有写成: ;[%_sVIy
const char * cc = oss.str().c_str(); // error YfBb=rN2s
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 0-H! \IB
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。