#include "stdafx.h" 3 =-XA2zJ
=Hf`yH\#
#include <iostream> fuao*L]
#include <fstream> ~lH_d[
#include <sstream> :-)H
ty zf
#include <iterator> 6h9Hf$'
using namespace std; ;*[oi
*aaK_=w
int main(int argc, char* argv[]) &r0U9J
{ M>g%wg7Ah
ifstream ifs("test.txt"); i8|0zI
if(!ifs) bTep TWv
return false; .6HHUy
$3)Z>p
ostringstream oss; e.VR9O]G
istream_iterator<char> inpos(ifs); -ztgirU
istream_iterator<char> endpos; _Qd CV`
ostream_iterator<char> out(oss); &Fy})/F3v
std::copy(inpos, endpos, out); sX[k}=HCK
string& szData = oss.str(); -a\[`JHi
!}I+)@~\w
const char * cc = szData.c_str(); ={[9kR i
// cout << (long)szData << endl; ]Mb:zs<r
// cout << (long)oss.str().c_str() << endl; !5*
cout<< cc; V<ExR@|}.%
Gk-49|qIV
return 0; VbfTdRD-
} hA:RVeS{
O0RV>Ml'&
注意以上代码中红色部分没有写成: .{,fb
const char * cc = oss.str().c_str(); // error M T]2n{e
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 d8ck].m=
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。