#include "stdafx.h" -<e_^
w$""])o,
#include <iostream> {s6hi#R>
#include <fstream> }%^ 3
#include <sstream> JbN,K
#include <iterator> f'BmIFb#
using namespace std; P0k.\ 8qz
Gh<#wa['}
int main(int argc, char* argv[]) #F6M<V'
{ [jGE{<Je
ifstream ifs("test.txt"); @4Q/J$
if(!ifs) 8N3rYx;d~
return false; !P":z0K4
IYr}%:P)
ostringstream oss; :?>yi7w
istream_iterator<char> inpos(ifs); &'?Hh(
istream_iterator<char> endpos; - rI4_Dl
ostream_iterator<char> out(oss); M-e|$'4u
std::copy(inpos, endpos, out); Z4m+GFY
string& szData = oss.str(); =c%gV]>G
#RKd>ig%
const char * cc = szData.c_str(); Ds{DVdqA$c
// cout << (long)szData << endl; LC e6](Z
// cout << (long)oss.str().c_str() << endl; 57_AJT hR
cout<< cc; Iv u'0vF
Wq?vAnLbk
return 0; <oSx'_dc
} Jyp7+M]
p[;@9!t
注意以上代码中红色部分没有写成: 8~O0P=
const char * cc = oss.str().c_str(); // error =4OV
}z=I
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 `3z6y&dmx
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。