#include "stdafx.h" /g!X[rn7Q
J|8 u
#include <iostream> #BI6+rfv|
#include <fstream> x139Ckn
#include <sstream> cejD(!MKe
#include <iterator> i}C%`1+(
using namespace std; ~S0T+4$
?~; q r
int main(int argc, char* argv[]) tU-jtJ
{ f=>iiv
ifstream ifs("test.txt"); z~jk_|?|?
if(!ifs) ItG|{Bo
return false; hNF, sA
*#B"%;Ln
ostringstream oss; |(5|6r3
istream_iterator<char> inpos(ifs); -B:O0;f
istream_iterator<char> endpos; QhPpo#^
ostream_iterator<char> out(oss); /$UWTq/C7
std::copy(inpos, endpos, out); 02po;
string& szData = oss.str(); Hnbd<?y
K$-|7tJon
const char * cc = szData.c_str(); tBE-:hX*
// cout << (long)szData << endl; )GJlQ1x
// cout << (long)oss.str().c_str() << endl; S@C"tHD
cout<< cc; liTAV9<
4$4n9`odE
return 0; SqT+rvTh
} *G,r:Bnb
D o!]t7Y$
注意以上代码中红色部分没有写成: N<|-b0#Z6
const char * cc = oss.str().c_str(); // error T`) uR*$
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 :$oi P
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。