#include "stdafx.h" %sS7o3RW\
Yt;@@xe&
#include <iostream> 7T?7KS
#include <fstream> yjucR
Fl
#include <sstream> =@k3*#\
#include <iterator> 6K5KkEp
using namespace std; ;W!hl<``d*
cKAZWON8;v
int main(int argc, char* argv[]) j*jq2u
{ u_S>`I
ifstream ifs("test.txt"); "HbrYYRb'
if(!ifs) `pXC= []B2
return false; "Oy&6rrr
l5_%Q+E_
ostringstream oss; G/8G`teAZ
istream_iterator<char> inpos(ifs); z|G 39
istream_iterator<char> endpos; m} nA-*
ostream_iterator<char> out(oss); 1I U*:Z;Rz
std::copy(inpos, endpos, out); Alb5#tm:m
string& szData = oss.str(); WR>2t&;E
LWP&Si*j
const char * cc = szData.c_str(); q8vRUlf
// cout << (long)szData << endl; [>f4&yY
// cout << (long)oss.str().c_str() << endl; @0rwvyE=+3
cout<< cc; 3WF6bJN
5$f*fMd;
return 0; w5}2$r
} _:9-x;0H2
"zN]gz=OV>
注意以上代码中红色部分没有写成: L QP4#7
const char * cc = oss.str().c_str(); // error UjQi9ELoJ
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 "G!V?~;
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。