#include "stdafx.h" Xt*%"7yTp
tUF]f6
#include <iostream> "(&`muIc
#include <fstream> (Ha}xwA~(
#include <sstream> c!wB'~MS#
#include <iterator> /r@
using namespace std; YgOgYo{E!
L=!kDU
int main(int argc, char* argv[]) 6@ ^`-N;
{ pYUkd!K"
ifstream ifs("test.txt"); |F{E4mg(o
if(!ifs) rPvX8*)tV
return false; ,;pX.Ob U
HwMsP$`q
ostringstream oss; }4]x"DfIg
istream_iterator<char> inpos(ifs); >,vW
istream_iterator<char> endpos; GJfNO-
ostream_iterator<char> out(oss); WR EGRy
std::copy(inpos, endpos, out); -"9)c^KVx
string& szData = oss.str(); d6
EJn/
>Mw =}g@P
const char * cc = szData.c_str(); zR_l^NK
// cout << (long)szData << endl; Dohe(\C@
// cout << (long)oss.str().c_str() << endl; ]JuB6o_L
cout<< cc; TiEJyd`P
S%#Mu|
return 0; H1i4_T
} 2czL 1Ci
C)}LV
注意以上代码中红色部分没有写成: ([o:_5/8I
const char * cc = oss.str().c_str(); // error ~M1%,]
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ,?~,"IQyi[
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。