#include "stdafx.h" }PdHR00^
KZK9|121
#include <iostream> g\Gx
oR
#include <fstream> w>RBth^p
#include <sstream> a-P'h1hbH
#include <iterator> (
Lp~:p
using namespace std; -85]x)JE
~hJ/&,vH!
int main(int argc, char* argv[]) u!iBAr5
{ J|ni'Hb
ifstream ifs("test.txt"); ubq4Zv7'
if(!ifs) hN~]$"@2
return false; *Ey5F/N}$H
,(%?j]_P2
ostringstream oss; <4caG2~q
istream_iterator<char> inpos(ifs); m~upTQz
istream_iterator<char> endpos; q(N2#di
ostream_iterator<char> out(oss); |sa{!tKJ
std::copy(inpos, endpos, out); NS^(5g
string& szData = oss.str(); caK<;bmu-
QH_0U`3
const char * cc = szData.c_str(); o_!=-AWV
// cout << (long)szData << endl; m-{t%[Y
// cout << (long)oss.str().c_str() << endl; s`:>"1\|
cout<< cc; j _r?4k
_;8aiZt|u
return 0; ah82S)a`}
} f^
q0#+k )
$6&P 69<
注意以上代码中红色部分没有写成: @@!Mt~\
const char * cc = oss.str().c_str(); // error h"mG \xi
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Y Mes314"
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。