#include "stdafx.h" >#xIqxV,
gBXbB9
#include <iostream> Gii1|pLZ1
#include <fstream> x.U:v20`
#include <sstream> E.Arq6
#include <iterator> ?)/&tk9.n
using namespace std; \ 3l3,VYH
mH4Jl1S&
int main(int argc, char* argv[]) yd`f<Hr<m
{ 'c/Z
W
ifstream ifs("test.txt"); {,o =K4CD
if(!ifs) 2&:w_KJ
return false; E
uk[ @1
+H3;{ h9,
ostringstream oss; !O/(._YB`
istream_iterator<char> inpos(ifs); %4h$/~
istream_iterator<char> endpos; f\vg<lca
ostream_iterator<char> out(oss); 3*<~;Z' z4
std::copy(inpos, endpos, out); ,N2|P:x
string& szData = oss.str(); >iWw
i'T=
d@<~u,Mt&F
const char * cc = szData.c_str(); CDRz3Hu U
// cout << (long)szData << endl; h%%dRi
// cout << (long)oss.str().c_str() << endl; ^36m$J $
cout<< cc; 0BHSeO,
IdL~0;W7
return 0; ZG-[Gz
} Cn8w})B
(>gHfC>(lq
注意以上代码中红色部分没有写成: 7E)*]7B%
const char * cc = oss.str().c_str(); // error {
daEKac5
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 <0^L L
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。