#include "stdafx.h" kL"2=7m;
I4i>+:_J
#include <iostream> ._{H~R|
#include <fstream> @r/nF5
#include <sstream>
wcY?rE9
#include <iterator> #'9HU2
using namespace std; @i IRmQ
Dwfu.ZJa
int main(int argc, char* argv[]) ( 0_2sfS
{ YglmX"fLf
ifstream ifs("test.txt"); Zba2d,8/
if(!ifs) J{fH['tzO
return false; RdRp.pb8
I(BQ34q
ostringstream oss; YGCL2Y
istream_iterator<char> inpos(ifs); ]|PiF+
istream_iterator<char> endpos; _^%,x
ostream_iterator<char> out(oss); n]o<S+z
std::copy(inpos, endpos, out); vT,AMja
string& szData = oss.str(); 3m!X/u
VQ9/Gxdeo
const char * cc = szData.c_str(); n[Y~]
// cout << (long)szData << endl; Fyatd
// cout << (long)oss.str().c_str() << endl; IKilr'
cout<< cc; ^yN&ZI3P&
fHd#u%63K
return 0; $C$V%5aA
} <1${1A <Wa
[j/9neaye
注意以上代码中红色部分没有写成: N~zdWnSZ@G
const char * cc = oss.str().c_str(); // error #fn)k1
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 6fEqqUeV
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。