#include "stdafx.h" xC3h m
t=,ZR}M1`
#include <iostream> ?vmu,y
#include <fstream> ?]*WVjskE
#include <sstream> /_WAF90R?
#include <iterator> &cZQ,o
using namespace std; 9v\x&h
~lBb%M
int main(int argc, char* argv[]) '}4z=f`}
{ a
~s:f5S>
ifstream ifs("test.txt"); ` ,lm:x+(0
if(!ifs) CbvP1*1
return false; 6MCLm.L
#'DrgZ)W
ostringstream oss; cTC -cgp
istream_iterator<char> inpos(ifs); pUcN-WA
istream_iterator<char> endpos; /KU9sIE;
ostream_iterator<char> out(oss); lN(|EI
std::copy(inpos, endpos, out); XmZs4~\K$G
string& szData = oss.str(); pZE}<EX
kM:Z(Z7$
const char * cc = szData.c_str(); Mh=yIx</
// cout << (long)szData << endl; |IcA8[
// cout << (long)oss.str().c_str() << endl; 0W_olnZ
cout<< cc; C VXz>oM
(:(Imk;9
return 0; Yvi.l6JL
} tPp9=e2[s
l|kGp~
注意以上代码中红色部分没有写成: COc,
const char * cc = oss.str().c_str(); // error VyMFALSe]h
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 RJ\'"XQ
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。