#include "stdafx.h" f z8eL:i:
I.\fhNxHY
#include <iostream> /^\6q"'
#include <fstream> 'DQKpk'
#include <sstream> ZOG6
#include <iterator> ]f q.r
using namespace std; j{9sn,<:
/wL}+
int main(int argc, char* argv[]) \6xVIQ& 0
{ >%.6n:\rG
ifstream ifs("test.txt"); PQ|kE`'
if(!ifs) 9_F2nmEv
return false; 9Qb_BNUo
GKwm %A
ostringstream oss; PDo%ob\Ym
istream_iterator<char> inpos(ifs); X&6p_Lo
istream_iterator<char> endpos; i1?H*:]
ostream_iterator<char> out(oss);
/E@|
std::copy(inpos, endpos, out); $R7n1
string& szData = oss.str(); ?8n`4yO0
,!3G
const char * cc = szData.c_str(); snV,rZ
// cout << (long)szData << endl; s7<x~v+^
// cout << (long)oss.str().c_str() << endl; FHI`/
cout<< cc; AjK'P<:/
g#1_`gK
return 0; Jn.WbS
} _*+ 7*vAL
%@5f+5{i!z
注意以上代码中红色部分没有写成: Qe=!'u.nL
const char * cc = oss.str().c_str(); // error Z!m0nx
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 [=-?n6
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。