#include "stdafx.h" &aLTy&8Fv
alaL/p{O
#include <iostream> Yi*F;V
#include <fstream> &>,;ye>A
#include <sstream> K8;SE!
#include <iterator> Z~~6y6p
using namespace std; iZ-R%- }B
.ybmJU*Hg
int main(int argc, char* argv[]) w`)5(~b
{ W2
-%/
ifstream ifs("test.txt"); nn_O"fZi
if(!ifs) ~oa}gJl:}-
return false; -WlYHW
c$Kc,`2m7
ostringstream oss; #1DEZ4]jjY
istream_iterator<char> inpos(ifs); vW1^
istream_iterator<char> endpos; Y 3BJ@sqz
ostream_iterator<char> out(oss); $3^M-w
std::copy(inpos, endpos, out); @M5+12FYt
string& szData = oss.str(); Lt't
N}?|ik
const char * cc = szData.c_str(); GfE>?mG
// cout << (long)szData << endl; d:(Ex^^
// cout << (long)oss.str().c_str() << endl; |Ns4^2
cout<< cc; a)QT#.
1;ttwF>G7
return 0; d m8t~38
} iBSM
\ n
im2mA8OH
注意以上代码中红色部分没有写成: 4>*=q*<V5E
const char * cc = oss.str().c_str(); // error .|
4P
:r
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 '[
t.
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。