#include "stdafx.h" }A7qIys$4
0?xiG SZV
#include <iostream> '[8b0\
#include <fstream> =.hDf<U
#include <sstream> |q2lTbJ
#include <iterator> i@Zj7#e*
using namespace std; )<F\IM
Zbh]OCN
int main(int argc, char* argv[]) \cP'#jZz
{ S\5k'ifh
ifstream ifs("test.txt"); znO00qX
if(!ifs) &;U7/?Q
return false; ';,Bn9rv
\]A;EwC4C
ostringstream oss; !(K{*7|h
istream_iterator<char> inpos(ifs); ~!F4JRf
istream_iterator<char> endpos; 7$W;4!BN*
ostream_iterator<char> out(oss); bV*zMoD#
std::copy(inpos, endpos, out); &AcFa<U
string& szData = oss.str(); Gc!8v}[7J
V55J[s*6!
const char * cc = szData.c_str(); ,l .U^d6>
// cout << (long)szData << endl; rDX'oP:
// cout << (long)oss.str().c_str() << endl; `L#?eQ{
cout<< cc; 'Q>z**
8]":[s6x
return 0; NJf(,Mr*|
} [Cqqjv;_
|cGeL[
注意以上代码中红色部分没有写成: ]esLAo
const char * cc = oss.str().c_str(); // error }FiN 7#
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 !u{"] T:
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。