#include "stdafx.h" SZ1C38bd,.
{Rz`)qqE
#include <iostream> Z'fy9
#include <fstream> zf S<X
#include <sstream> f~U|flL^
#include <iterator> ~O|0.)71]
using namespace std; 'x18F#g
X F40;urm
int main(int argc, char* argv[]) `kz_q/K
{ !nYAyjf
ifstream ifs("test.txt"); AzQ}}A;TSx
if(!ifs) SBF3\
return false; J$P]>By5:
-0Q!:5EC
ostringstream oss; $zbg
istream_iterator<char> inpos(ifs); r8>
q*0~s
istream_iterator<char> endpos; U$J]^-AS
ostream_iterator<char> out(oss); Df4n9m}E
std::copy(inpos, endpos, out); i &KbzOY
string& szData = oss.str(); "?il07+w%
v
EX <9
const char * cc = szData.c_str(); Aqc(
// cout << (long)szData << endl; P&SR;{:y
// cout << (long)oss.str().c_str() << endl; Uexb>|
cout<< cc; r94BEC 2
cN :;ir
return 0; ^KhFBed
} Fb}9cpz{
'1{~y3
注意以上代码中红色部分没有写成: ZcQm(my
const char * cc = oss.str().c_str(); // error b"Ulc}$/&
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Vw#07P#A
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。