#include "stdafx.h" 3CgID6[Sy
,A'| Z
#include <iostream> SV@*[r
#include <fstream> <pfl>Uf
#include <sstream> +: x[cK
#include <iterator> h;,1BpbM
using namespace std; f-3CDUQ`
6#7hMQ0&;O
int main(int argc, char* argv[]) H1f='k]SZ
{ w i[9RD@
ifstream ifs("test.txt"); vn+XY=Qnr
if(!ifs) gUNhN1=
return false; G &xtL
+q'\rpt
ostringstream oss; ?h6|N%U'
istream_iterator<char> inpos(ifs); vof8bQ{&
istream_iterator<char> endpos; ?HJh;96B
ostream_iterator<char> out(oss); j*@@H6G
std::copy(inpos, endpos, out); jB8Q% {%
string& szData = oss.str(); hH 5}%/vF
TKM^
const char * cc = szData.c_str(); 4^uSW&`;/
// cout << (long)szData << endl; E{EO9EI
// cout << (long)oss.str().c_str() << endl; Z/%FQ
cout<< cc; kV+^1@"
Wk\(jaL%
return 0; GA[Ebzi
} ''YqxJ fb
I<O$);DV'
注意以上代码中红色部分没有写成: @oE
5JM
const char * cc = oss.str().c_str(); // error kh9'W<tE
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 D3cJIVM
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。