#include "stdafx.h" $0A ~uDbs
is^pgKX
#include <iostream> b-5y9 K
#include <fstream> zDOKShG
#include <sstream> \6I+K"
#include <iterator> %b2oiKSBx?
using namespace std; r{?TaiK
?
zDa=7 J
int main(int argc, char* argv[]) s,]%dG!
{ n'FwM\
ifstream ifs("test.txt"); wBk@F5\<
if(!ifs)
W-~n|PX8+
return false; U977#MXf
tAu4haa4;
ostringstream oss; rNOES3[~
istream_iterator<char> inpos(ifs); Ard]147
istream_iterator<char> endpos; N5zlT
ostream_iterator<char> out(oss); Y]|:?G7l]
std::copy(inpos, endpos, out); [/M^[p
string& szData = oss.str(); E6B!+s!]
9O.Y OiW
const char * cc = szData.c_str(); uGN^!NG-0
// cout << (long)szData << endl; TtD@'QXq
// cout << (long)oss.str().c_str() << endl; 0IkM
cout<< cc; RJeDEYXeg
Z"-L[2E/{!
return 0; p>=[-(mt
} >x1p%^cA;=
aolN<u3G
注意以上代码中红色部分没有写成: KW^<,qt5w
const char * cc = oss.str().c_str(); // error {svn=H
/
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Y/ot3[
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。