#include "stdafx.h" ;IN!H@bq
NJ^H"FLS:
#include <iostream> h($XR+!#
#include <fstream> 2ZZ%BV!s
#include <sstream> j. @CB`
#include <iterator> 17-D\
+}
using namespace std; C-vFl[@a0
("G
_{tVU
int main(int argc, char* argv[])
-tQi~Y[]
{ H$M#+EfL
ifstream ifs("test.txt"); <Cbah%X
if(!ifs) B=4xZJPy
return false; MLu@|Xgh
|)"`v'8>
ostringstream oss; bO)voJ<
istream_iterator<char> inpos(ifs); /-in:gX8
istream_iterator<char> endpos; ?9Lp@k~TO
ostream_iterator<char> out(oss); P^wDt14>
std::copy(inpos, endpos, out); y:C=Ni&,"
string& szData = oss.str(); A/WmVv6
1MntTIT
const char * cc = szData.c_str(); ^)qOILn
// cout << (long)szData << endl; EWcqMD]4u
// cout << (long)oss.str().c_str() << endl; x]e&G!|
cout<< cc; Bl\/q83(
@-L4<=$J
return 0; 7GY3_`
} Cb`2" mpWS
*B$$6'hi`
注意以上代码中红色部分没有写成: 91|0{1
const char * cc = oss.str().c_str(); // error !Vtj:2PQL
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 'Gr}<B$A3
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。