#include "stdafx.h" hd2'AlB
id ?"PD"%
#include <iostream> ?iv=53<c#
#include <fstream> :HRT 2I
#include <sstream> y(5:}x&E
#include <iterator> dY!u)M;~~
using namespace std; 'N\&<dT>
E)W@{?.o#
int main(int argc, char* argv[]) NLyXBV[hV
{ 9 |{%i$
ifstream ifs("test.txt"); \K7t'20
if(!ifs) "$| Zr
return false; o5!f#Y
hi|!
ostringstream oss; c7K!cfO:{N
istream_iterator<char> inpos(ifs); E"qFXA>
istream_iterator<char> endpos; ;JT(3yK4>p
ostream_iterator<char> out(oss); 7&U&E|
std::copy(inpos, endpos, out); 6S1m<aH6
string& szData = oss.str(); _Zc4=c,K
O,s. D,S
const char * cc = szData.c_str(); P|xG\3@Z
// cout << (long)szData << endl; F PR`tE
// cout << (long)oss.str().c_str() << endl; Xgat-cy'DA
cout<< cc; /[=E0_t+
I[d]!YI}F
return 0; <41ZZ0<EwY
} NmpnJu|8
[=uIb._Wv
注意以上代码中红色部分没有写成: eKG2*CV
const char * cc = oss.str().c_str(); // error /Vww?9U;
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 y9 L14
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。