#include "stdafx.h" t#.}0Te7
C)U4Fr ?E:
#include <iostream> ~+' f[!^
#include <fstream> \Hp!NbnF$
#include <sstream> ""7H;I&
#include <iterator> e&x)g;bn
using namespace std; <ci(5M
fR[8O\U~
int main(int argc, char* argv[]) J~KO#`
{ c$1u
ifstream ifs("test.txt"); a>vxox) %
if(!ifs) 2e\"?y OD
return false; Yuv=<V
_zDS-e@
ostringstream oss; Tp-W/YC
istream_iterator<char> inpos(ifs); jP<6J(
istream_iterator<char> endpos; rCa]T@=
ostream_iterator<char> out(oss); Oey
Ph9^V
std::copy(inpos, endpos, out); >aJmRA-C}
string& szData = oss.str(); !!L'{beF
h.?<(I
const char * cc = szData.c_str(); ky|k g@n{
// cout << (long)szData << endl; ;}6wj@8He
// cout << (long)oss.str().c_str() << endl; L&+k`b
cout<< cc; lai@,_<GV
eM!Oc$C8[
return 0; ~EmK;[Z
} .*N,x(V
N$>Ml!J
注意以上代码中红色部分没有写成: j?C[ids<
const char * cc = oss.str().c_str(); // error RK@K>)"f
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 o%Q9]=%!
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。