#include "stdafx.h" iRG?# "
rVQX7l# YI
#include <iostream> f>$h@/-*
#include <fstream> Lc<eRVNd,
#include <sstream> %lr|xX
#include <iterator> 'f/Lv@]a
using namespace std; lH|LdlX
nzX@:7g
int main(int argc, char* argv[]) R.j1?\
{ tLm867`c7
ifstream ifs("test.txt"); gLL-VvJ[
if(!ifs) 8_uzpeRhJc
return false; j2h[70fWC
SW(q$i
ostringstream oss; DhI>p0* T
istream_iterator<char> inpos(ifs); *.f2VQ~H
istream_iterator<char> endpos; |0bc$ZY:
ostream_iterator<char> out(oss); 2aw&F Z?
std::copy(inpos, endpos, out); BbJkdt7
string& szData = oss.str(); v|
z08\a[
%K 4
const char * cc = szData.c_str(); DE{h5-g
// cout << (long)szData << endl; ZF#Rej?
// cout << (long)oss.str().c_str() << endl; o%M<-l"!/
cout<< cc; Bk|K%K
Nq 8@Nyp
return 0; >s*Drf X6
} <
/p8r
Mo|wME#M
注意以上代码中红色部分没有写成: v4*rPGv
const char * cc = oss.str().c_str(); // error % U`xu.
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ~3WL)%
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。