#include "stdafx.h" .4={K)kz|F
>yvP[$]!6
#include <iostream> }GvoQ#N
#include <fstream> U
-~%-gFC
#include <sstream> GypZ!)1
#include <iterator> -oq!zi4:
using namespace std; 4mOw[}@A
PpMZ-f@
int main(int argc, char* argv[]) '|^LNAx
{ K#M
h
ifstream ifs("test.txt"); g!n1]- 1
if(!ifs) ,oe
e'
return false; -Hzn7L
^|}C!t+
ostringstream oss; 2{s ND
istream_iterator<char> inpos(ifs); J<DV7zV
istream_iterator<char> endpos; b~06-dk1
ostream_iterator<char> out(oss); ulFU(%&
std::copy(inpos, endpos, out); iHjo3_g)n
string& szData = oss.str(); eux_tyC
w?ssV
const char * cc = szData.c_str(); IV^LYu
// cout << (long)szData << endl; dsDoPo0!
// cout << (long)oss.str().c_str() << endl; 5_Yv>tx
cout<< cc; BOJh-(>I
~Wu Elns
return 0; vl$! To9R"
} Wm:3_C +j
_dqjRhu
注意以上代码中红色部分没有写成: _5a]pc$\Y]
const char * cc = oss.str().c_str(); // error YVVX7hB
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 7ka^y k@Q
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。