#include "stdafx.h" (mpNcOY<D
m=:9+z
#include <iostream> x=P\qjSa
#include <fstream> By!o3}~g
#include <sstream> m+[Ux{$
#include <iterator> c7k~S-nU
using namespace std; H/
HMm{4
C ;W"wBz9
int main(int argc, char* argv[]) IHac:=*Q
{ rglXs
ifstream ifs("test.txt"); gPI
?C76
if(!ifs) K($Npuu]
return false; (y~TL*B
r#p9x[f<Y
ostringstream oss; +~$ ]}%
istream_iterator<char> inpos(ifs); EW OVx*l
istream_iterator<char> endpos; sY&IquK^
ostream_iterator<char> out(oss); B~ GbF*j
std::copy(inpos, endpos, out); ! n@KU!&k
string& szData = oss.str(); N=}A Z{$
5|s\*bV`
const char * cc = szData.c_str(); kbQ>a5`,x
// cout << (long)szData << endl; A?P_DA
// cout << (long)oss.str().c_str() << endl; r),kDia
cout<< cc; IOmfF[
.t!x<B
return 0; ]w8(&,PP
} KkbD W3-
R__OP`!
注意以上代码中红色部分没有写成: hL{KRRf>
const char * cc = oss.str().c_str(); // error tS=(}2Q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ;*Et[}3
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。