#include "stdafx.h" )x,/+R]{8l
u`.3\Geh
#include <iostream> 4se6+oJe
#include <fstream> E<ILZpP
#include <sstream> r6eZ-V`4
#include <iterator> _1?nLx7n
using namespace std; w%?Zb[!&
5tI#UBha
int main(int argc, char* argv[]) zfD@/kU
{ &cWC&Ws"
ifstream ifs("test.txt"); GlHP`&;UH
if(!ifs) +/[L-&,
return false; x?UAj8z6
*rgF[
:
ostringstream oss; y6dQ4Whv&
istream_iterator<char> inpos(ifs); iT;Ld $!{f
istream_iterator<char> endpos; 4VHWoN"U
ostream_iterator<char> out(oss); VFrp7;z43
std::copy(inpos, endpos, out); v8YF+N
string& szData = oss.str(); }4g$aTc
k|czQ"vaI
const char * cc = szData.c_str(); zcC:b4
// cout << (long)szData << endl;
Y(
// cout << (long)oss.str().c_str() << endl; =H`yzGt
cout<< cc; _dY5qW1p
e-Oz`qW~
return 0; xnC:?d
} @Di!~e6
AdpJ4}|0
注意以上代码中红色部分没有写成: b^STegz
const char * cc = oss.str().c_str(); // error V'tqsKQ!
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 oTRidG
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。