#include "stdafx.h" rR!U;
7C5pAb:
#include <iostream> WOO%YU =
#include <fstream> .v,bXU$@YG
#include <sstream> JIUtj7HQ
#include <iterator> ;,0lUcV
using namespace std; 8U^D(jrz
+{6`F1MO
int main(int argc, char* argv[]) b~W)S/wF$P
{ }
gkP
ifstream ifs("test.txt"); y`b\;kd
if(!ifs) vbKQ*
return false; C6)R#
\Hs|$
ostringstream oss; >Me]m<$E;
istream_iterator<char> inpos(ifs); =hcPTU-QU
istream_iterator<char> endpos; BPWnck=%
ostream_iterator<char> out(oss); *mV&K\_
std::copy(inpos, endpos, out); pAg$oe#
string& szData = oss.str(); l.7d$8'\
aFG3tuaKrQ
const char * cc = szData.c_str(); M@O2
WB1ws
// cout << (long)szData << endl; >tEK+Y|N}
// cout << (long)oss.str().c_str() << endl; %FlA":W
cout<< cc; B+Q+0tw*i
E|,30Z+
return 0; cqk]NL`'
} vfXJYw+6_
M]B3vPA/v
注意以上代码中红色部分没有写成: ( 2zeG`
const char * cc = oss.str().c_str(); // error ]-KV0H
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 "=ElCaP}
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。