#include "stdafx.h" 7o0zny3?
^DN:.qQ
#include <iostream> 8L,=E ap
#include <fstream> FieDESsX>
#include <sstream> FpiTQC7d
#include <iterator> b8e\( Dww
using namespace std; u4_QLf@I
V^,eW!
int main(int argc, char* argv[]) (-g*U#
{ 8Z0x*Ssk
ifstream ifs("test.txt"); @zC6`
if(!ifs) {nbT$3=Zt
return false; <)p.GAZ
Lo~;pvv
ostringstream oss; 1_<x%>zG
istream_iterator<char> inpos(ifs); 59O-"Sc[
istream_iterator<char> endpos; s(nT7x+W
ostream_iterator<char> out(oss); b,^Gj]7
std::copy(inpos, endpos, out); 0|RofL&o
string& szData = oss.str(); ?+))J~@t
D3yTN"
const char * cc = szData.c_str(); +rJ6DZ
// cout << (long)szData << endl; ."H;bfcL_
// cout << (long)oss.str().c_str() << endl; ~L"$(^/
cout<< cc; $'%GB $.
]
\M+j u
return 0; `XhH{*Q"X
} qx'0(q2Ii(
"bIb?e2h9G
注意以上代码中红色部分没有写成: X+C*+k,z
const char * cc = oss.str().c_str(); // error ~%8P0AP
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 SfnQW}RGI
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。