#include "stdafx.h" \Z-T)7S
zZ&L#
#include <iostream> [`nY/g:
#include <fstream> ")'o5V
#include <sstream> YhYcqE8
#include <iterator> 0OO$(R*
using namespace std; 3o&PVU?Q
j/`-x
int main(int argc, char* argv[]) +e?mKLw14
{ 3e4; '5q;
ifstream ifs("test.txt"); e6f:@ O?
if(!ifs) U]tbV<m%
return false; jX}}^XwX
<NZ^*]
ostringstream oss; -.-je"E
istream_iterator<char> inpos(ifs); ,e{( r0
istream_iterator<char> endpos; 2\h}6DGx2
ostream_iterator<char> out(oss); .VG$`g"
std::copy(inpos, endpos, out); V #["Z}
string& szData = oss.str(); _PD RUJ
X]ow5{e
const char * cc = szData.c_str(); Dnn$-W|NC
// cout << (long)szData << endl; gKy@$at&
// cout << (long)oss.str().c_str() << endl; JRt^YX
cout<< cc; v- M3/*
q"xIW0Pc
return 0; ngJi;9X8*t
} >=Hm2daN
D%GB2-j R
注意以上代码中红色部分没有写成: 3mKmd iD
const char * cc = oss.str().c_str(); // error qD=o;:~Km
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 NfvvwG;M
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。