#include "stdafx.h" O| ]Ped9
r<v%Zp
#include <iostream> 5XI*I(.%/
#include <fstream> hhGpB$A
#include <sstream> ?m1$*j
#include <iterator> @U{M"1zZe
using namespace std; ?<'W~Rm6n
c5e\ckqm^
int main(int argc, char* argv[]) F* }Q^%
{ Xb*_LZAU
ifstream ifs("test.txt"); lM*O+k
if(!ifs) , ~xU>L^
return false; ZPao*2xz
&o@5%Rz2/
ostringstream oss; o$VH,2 QF
istream_iterator<char> inpos(ifs); qk,y |7p
istream_iterator<char> endpos; QV$dKjMS
ostream_iterator<char> out(oss); gc3 U/
jM
std::copy(inpos, endpos, out); TSSt@xQ+
string& szData = oss.str(); ]a#]3(o]}
9Fx z!-9m
const char * cc = szData.c_str(); O^weUpe\
// cout << (long)szData << endl; KHz838C]
// cout << (long)oss.str().c_str() << endl; &6=ZT:.6Te
cout<< cc; OIty
]c
Z'dI!8(Nf
return 0; n "KJB
} ?{,)XFck
{mnSTL`
注意以上代码中红色部分没有写成: */dh_P<Yj
const char * cc = oss.str().c_str(); // error HcVs(]tIW
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 irb.F>(x
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。