#include "stdafx.h" E=N$JM
Y>8Qj+d
#include <iostream> >I|8yqbfm
#include <fstream> st;iGg
#include <sstream> b2OwLt9
#include <iterator> b)<WC$"
using namespace std; (T_-`N|
hO]F\0+
int main(int argc, char* argv[]) b3^:Bh9
{ `*3A7y
ifstream ifs("test.txt"); z_!IA
] v
if(!ifs) ?
`p/jA
return false; o{G*7V@H
A$=ny6
ostringstream oss; :$$~$P
istream_iterator<char> inpos(ifs); nbF<K?
istream_iterator<char> endpos; }6@E3z]AMO
ostream_iterator<char> out(oss); oFj_o
std::copy(inpos, endpos, out); vN'+5*Cgy6
string& szData = oss.str(); 8YFG*HSa
sfyLG3$/
const char * cc = szData.c_str(); LN|(Z*
// cout << (long)szData << endl; 5rows]EJJl
// cout << (long)oss.str().c_str() << endl; { c#US
cout<< cc; Vr
EGR$
XM`GK>*aC(
return 0; `eMZhYo
} gz~oQ
l)zJ
d}\]!x3t
注意以上代码中红色部分没有写成: ryL1<u
~
const char * cc = oss.str().c_str(); // error :)~l3:O
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 a+E
8s7C/D
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。