#include "stdafx.h" isBtJ7 \Sc
*VX"_C0Jy=
#include <iostream> s!IX3rz
#include <fstream> B3^F
$6=
#include <sstream> omP\qOc
#include <iterator> XJZ\ss
using namespace std; zH5pe
#"qP4S2
int main(int argc, char* argv[]) s'4O]k`
{ AAXlBY6Y-
ifstream ifs("test.txt"); wo+b":
if(!ifs) m{gw:69h
return false; !kxJ&VmeF
Zxw
cqN
ostringstream oss; +$YHdgZ.
istream_iterator<char> inpos(ifs); 5i@WBa
istream_iterator<char> endpos; ey]WoUZ
ostream_iterator<char> out(oss); drQI@sPp
std::copy(inpos, endpos, out); rRvZG&k
string& szData = oss.str(); <dGph
ID]E3K
const char * cc = szData.c_str(); vbh 5
// cout << (long)szData << endl; L9$`zc
// cout << (long)oss.str().c_str() << endl; [xdi.6%
cout<< cc; |}o6N5)
cx~XG
return 0; MBqw{cy
} Xaw ~Hh)
GU|(m~,`
注意以上代码中红色部分没有写成: H?_wsh4J
const char * cc = oss.str().c_str(); // error #|"M
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 (zX75QSKV
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。