#include "stdafx.h" @v=q,A8_
,quTMtk~
#include <iostream> ;VRR=p%,
#include <fstream> 5^/[] *
#include <sstream> mIo7 K5z{
#include <iterator> {jf~?/<
using namespace std; RBD
MZ
0z#kV}wE
int main(int argc, char* argv[]) 9-6_:N>
{ -"H4brj;G
ifstream ifs("test.txt"); O+j:L
if(!ifs) eR`<9KBH
return false; N|S xAg
L|w-s4L
ostringstream oss; _AbEQ\P{
istream_iterator<char> inpos(ifs); (=/;rJ`q
istream_iterator<char> endpos; MT0{hsuK9
ostream_iterator<char> out(oss); sdD[`#
std::copy(inpos, endpos, out); = h( n+y<
string& szData = oss.str(); &Z!2xfQy>
s+- aHn
const char * cc = szData.c_str(); ?!oa15
// cout << (long)szData << endl; V/e_:xECC
// cout << (long)oss.str().c_str() << endl; E%B Gf}h
cout<< cc; ;~1JbP
w'XgW0j{
return 0; efR$s{n!
} n#cN[C9
qT @IY)e
注意以上代码中红色部分没有写成: W
F<V2o{k
const char * cc = oss.str().c_str(); // error KK$A4`YoR
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 $ :wM'&M
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。