#include "stdafx.h" |36d<b Io
s1?N&t8c
#include <iostream> wHEt;rc(
#include <fstream> ![0\m2~iv
#include <sstream> VNp[J'a>VZ
#include <iterator> LW{7|g
using namespace std; 9V9K3xWn
]wc'h>w
int main(int argc, char* argv[]) hDSt6O4za
{ VK[^v;
ifstream ifs("test.txt"); |zKFF?7#wE
if(!ifs) `!K(P- yB?
return false; T9}G:6
0h_ 9
ostringstream oss; ToTehVw
istream_iterator<char> inpos(ifs); |p-, B>p!
istream_iterator<char> endpos; to|O]h2*U2
ostream_iterator<char> out(oss); &&nvv &a
std::copy(inpos, endpos, out); XBh0=E?qiS
string& szData = oss.str(); h'|{@X
V<*PaS..
const char * cc = szData.c_str(); iT227v!s
// cout << (long)szData << endl; zN:VT&
// cout << (long)oss.str().c_str() << endl; bzF>Efza
cout<< cc; RpOGY{[)[
cGIxE[n'
return 0; +? E~F
} .hzzoLI2
zn@<>o8hU
注意以上代码中红色部分没有写成: 04D>h0yFf
const char * cc = oss.str().c_str(); // error qRZv[T%*Q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 |D~mLs;&
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。