#include "stdafx.h" 4 OPY
rC8p!e.yL
#include <iostream> &nEL}GM)E
#include <fstream> |k.'w<6mb9
#include <sstream> ]p! {
#include <iterator> xXJ*xYn"}
using namespace std; eiK_JPF A-
*PF<J/Pr
int main(int argc, char* argv[]) .n<vhLDQn
{ _LJF:E5L
ifstream ifs("test.txt"); 2yA)SGri
if(!ifs) U[wx){[|
return false; ~qinCIj
9c^ ,v_W@
ostringstream oss; ~0MpB~ {xd
istream_iterator<char> inpos(ifs); um,f!ho-U
istream_iterator<char> endpos; j_JY[sex
ostream_iterator<char> out(oss); z0[@O)Sj
std::copy(inpos, endpos, out); ggDT5hb
string& szData = oss.str(); 4aO/^Hl
=:rg1wo"c
const char * cc = szData.c_str(); $tZ
{>!N
// cout << (long)szData << endl;
8lusKww
// cout << (long)oss.str().c_str() << endl; a=2.Y?
cout<< cc; Vk{;g
9KVJk</:n
return 0; ]BO:*&O
} >.meecE?Q
33oW3vS
注意以上代码中红色部分没有写成: c}(H*VY2n
const char * cc = oss.str().c_str(); // error Z- feMM
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 C8m 9H8Qm
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。