#include "stdafx.h" Ov?k4kJ
a8Ci 7<V
#include <iostream> L
F Z
#include <fstream> +XFF@h&=t
#include <sstream> &IOChQ`8P
#include <iterator> Z4E:Z}~''
using namespace std; 3}LTEsdM
#Q$9Eq8"[
int main(int argc, char* argv[]) a{Tv#P*!
{ 1_GUi
ifstream ifs("test.txt"); MlS<txFPS
if(!ifs) (y#8z6\dx
return false; uF@Q8 7G
8~rD#8`6j
ostringstream oss; I.q nA
istream_iterator<char> inpos(ifs); A9$q;8= <
istream_iterator<char> endpos; qBKIl=
ne
ostream_iterator<char> out(oss); ETjlq]@j
std::copy(inpos, endpos, out); vxZz9+UbF
string& szData = oss.str(); 2hmV1gj
"{L%5:H@
const char * cc = szData.c_str(); AP/5,M<
// cout << (long)szData << endl; yy/wSk
// cout << (long)oss.str().c_str() << endl; &m+s5
cout<< cc; vpOzF>O
[<f\+g2ct
return 0; JBi<TDm/
} ,$W7Q
b_\aSEaTT
注意以上代码中红色部分没有写成: (j}"1
const char * cc = oss.str().c_str(); // error K~v"%sG{`
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 H%Q@DW8~@
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。