#include "stdafx.h" w?JM;'<AYQ
] ]lN[J
#include <iostream> Z5Tu*u=
#include <fstream>
D}/nE>*
#include <sstream> A(1WQUu j
#include <iterator> fU>4Ip1?y/
using namespace std; `G<|5pe
bE%*ZB
int main(int argc, char* argv[]) 1UN$eb7
{ J l
fIYf~
ifstream ifs("test.txt"); *XkgwJq
if(!ifs) Dq<!wtFG[
return false; V`_)H
h/NI5
ostringstream oss; Z!z#+G
istream_iterator<char> inpos(ifs); V5!mV_EoR@
istream_iterator<char> endpos; ; 6q`c!p7
ostream_iterator<char> out(oss); ;0nL1R]w(
std::copy(inpos, endpos, out); {q/D,Rh8
string& szData = oss.str(); iHk/#a
'"9Wt@
.
const char * cc = szData.c_str(); 0O|l7mCr%I
// cout << (long)szData << endl; F
@uOXNz)
// cout << (long)oss.str().c_str() << endl; NI2-*G_M
cout<< cc; uX8G<7O^
*d}{7UMy#
return 0; Os[50j!4>
} UJ^-T+fut
T5+
(F z
注意以上代码中红色部分没有写成: ]DK.4\^
const char * cc = oss.str().c_str(); // error
PX5U)
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 |D~#9
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。