#include "stdafx.h" F-K=Otj
7g@P$e]
#include <iostream> 2p'ujAK
#include <fstream> *a}NRf}W
#include <sstream> fu3~W
#include <iterator> ,=o)R,[
using namespace std; AL*P2\8
':al4m"
int main(int argc, char* argv[]) &.XYI3Ab1
{ zdY+?s)p
ifstream ifs("test.txt"); =fA*b
if(!ifs) MLD-uI10{
return false; !&4<"wQ
"XQj~L
ostringstream oss; K5X,J/n
istream_iterator<char> inpos(ifs); 8$Igo$U-
istream_iterator<char> endpos; FCO5SX#-g
ostream_iterator<char> out(oss); xRum q
std::copy(inpos, endpos, out); UG)J4ZX
string& szData = oss.str(); zQY|=4NP
)nJo\HFXv
const char * cc = szData.c_str(); % H"A%
// cout << (long)szData << endl; 0}'
// cout << (long)oss.str().c_str() << endl; <?|v-(E
cout<< cc; V/%tFd1
oy+`` W~
return 0; "$)Nd+ny
} We7~tkl(
]WLQ q4q
注意以上代码中红色部分没有写成: m$glRs
@
const char * cc = oss.str().c_str(); // error d GEMrjx
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 iCA!=%M@D
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。