#include "stdafx.h" q*}$1 zb
a[J_H$6H!
#include <iostream> ?>mpUH
#include <fstream> " ,]A.,
#include <sstream> j|VX6U
#include <iterator> !Hj
7|5
using namespace std; Vg7BK%
{*X|)nr
int main(int argc, char* argv[]) < fYcON
{ fz rH}^
ifstream ifs("test.txt"); '\P+Bu]6&
if(!ifs) [6%y RQ_
return false; ?+L7Bd(EF%
Mlo:\ST|
ostringstream oss; +<3e@s&
istream_iterator<char> inpos(ifs); ?Skv2!X|
istream_iterator<char> endpos; [@0Hmd7
ostream_iterator<char> out(oss); EE*FvI`
std::copy(inpos, endpos, out); X3l6b+p
string& szData = oss.str(); rfOrh^
yJ!,>OQ%'
const char * cc = szData.c_str(); <o@__l.
// cout << (long)szData << endl; _r`(P#Hy
// cout << (long)oss.str().c_str() << endl; dZAb':
cout<< cc; W 7w*VD|
iThf\
return 0; 3m"9q
} /KhY,G'Z
x";4)u=
注意以上代码中红色部分没有写成: BLb'7`t
const char * cc = oss.str().c_str(); // error Ju_(,M-Vgr
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ?$=Ml$
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。