#include "stdafx.h" n8$=f'Hgb
2m\m/O
#include <iostream> F@1d%c
#include <fstream> "<x&pQZ%
#include <sstream> ~0ooRUWU7
#include <iterator> $3 4j6;oN
using namespace std; HlPG3LD!
>t0%?wj)Y
int main(int argc, char* argv[]) @zrNN>
{ GmbIFOT~
ifstream ifs("test.txt"); #
kEOKmO
if(!ifs) J\{$ot
return false; G'9{a'
JOHRmfqR
ostringstream oss; (]XbPW
istream_iterator<char> inpos(ifs); `L\)ahM
istream_iterator<char> endpos; thptm
ostream_iterator<char> out(oss); 7]s%rya
std::copy(inpos, endpos, out); !}5*?k
g
string& szData = oss.str(); ,1
P[
7 2,"Cj
const char * cc = szData.c_str(); +T2HE\
// cout << (long)szData << endl; Qci$YTwl>
// cout << (long)oss.str().c_str() << endl; jTfi@5aPY
cout<< cc; g4wZvra6%)
VgMP^&/gZ
return 0; m?;$;x~Dj
} %2D17*eK
|l7%l&!
注意以上代码中红色部分没有写成: 4P%m>[
const char * cc = oss.str().c_str(); // error .*!#98pT
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 9afh[3qm
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。