#include "stdafx.h" .TI=3*`G
?zFeP6C
#include <iostream> D/& 8[Z/Cn
#include <fstream> iR_j
h=2{
#include <sstream> x:Mh&dq?
#include <iterator> -o\o{?t,
using namespace std; '{e9Vh<x
pb>TUKvT&
int main(int argc, char* argv[]) 6oh\#v3zV
{ r8]y1
Om<
ifstream ifs("test.txt"); gd#j{yI/Xf
if(!ifs) 0Yh Mwg?
return false; 0[\^Y<ec
|$hBYw
ostringstream oss; g>L4N.ZH_v
istream_iterator<char> inpos(ifs); Z>9uVBE02
istream_iterator<char> endpos; QL_vWG-
ostream_iterator<char> out(oss); xEULV4Qw
std::copy(inpos, endpos, out); @/(\YzQvp]
string& szData = oss.str(); H>zX8qP+
n\X'2
const char * cc = szData.c_str(); )qyJwN
.D
// cout << (long)szData << endl; p }p@])}8
// cout << (long)oss.str().c_str() << endl; :>y?B!=
cout<< cc; ?W6qwm,?L
D9hV`fA
return 0; %MA o<,ha
} z' oK
0"
O~wZU Zf
注意以上代码中红色部分没有写成: pfs'2AFj
const char * cc = oss.str().c_str(); // error CtEpS<*c
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 TnuNoMD.
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。