#include "stdafx.h" #902x*Z'c"
ZG#:3d*)
#include <iostream>
cC|
#include <fstream> V*(x@pF
#include <sstream> k $8Zg*)
#include <iterator> Lc[TIX
using namespace std; 02%~HBS
iycceZ
int main(int argc, char* argv[]) OT=1doDp
{ ?MmQ'1N
ifstream ifs("test.txt"); )p> p3b g
if(!ifs) q@XJ,e1A
return false; w'$>E4\
Ygkf}n
ostringstream oss; x5pu+-h
istream_iterator<char> inpos(ifs); ,)J>8eV
istream_iterator<char> endpos; (18ZEKk
ostream_iterator<char> out(oss); jOGiT|A
std::copy(inpos, endpos, out); fO^s4gWTg
string& szData = oss.str(); _dCDT$^&r
C"0
VOb
const char * cc = szData.c_str(); )D'#>!Y
// cout << (long)szData << endl; vfx{:3fO
// cout << (long)oss.str().c_str() << endl; |wQ3+WN|
cout<< cc; sKR%YK
"A
;V?(j3b[
return 0; 0.nkh6?
} !Y7$cU &
"iX\U'`
注意以上代码中红色部分没有写成: 4MW oGV9
const char * cc = oss.str().c_str(); // error fl9VokAT
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 _?'W30Dg
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。