#include "stdafx.h" z%Ywjfn'
)#l &F$
#include <iostream> R|%
3JE0
#include <fstream> B08q/qi
#include <sstream> f&bY=$iff
#include <iterator> UB@>i3
using namespace std; Jvw~b\
%L+/GtxK
int main(int argc, char* argv[]) 'm# -)R!
{ j
wlmWO6
ifstream ifs("test.txt"); ;TD<\1HJT=
if(!ifs) >V;JI;[
return false; + ^{;o0kcx
M@UkXA}
ostringstream oss; ez%RWck
istream_iterator<char> inpos(ifs); NDglse
istream_iterator<char> endpos; CsS0(n(x
ostream_iterator<char> out(oss); y4$UPLm
std::copy(inpos, endpos, out); Z`v6DfK}
string& szData = oss.str(); O66\s q
&ME[H
const char * cc = szData.c_str(); %?J\P@
// cout << (long)szData << endl; 2/RK
pl &
// cout << (long)oss.str().c_str() << endl; e<dFvMO
cout<< cc; G'q7@d{'
<~!7? ak
return 0; Pk T&zSQA
} W%hdS<b
i)Vqvb0Q
注意以上代码中红色部分没有写成: b{)9?%_
const char * cc = oss.str().c_str(); // error Hq8<g$
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 zh2$U
dZ|M
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。