#include "stdafx.h" $WdZAv\_S
MEg|AhP
#include <iostream> E]Kd`&^}
#include <fstream> -O2QzzE&
#include <sstream> )U8F6GIC&}
#include <iterator> fE7Kv_N-%
using namespace std; >5 Ce/P'R
h4sEH
int main(int argc, char* argv[]) IN_GL18^MV
{ brZ3T`p+.P
ifstream ifs("test.txt"); UUX
_x?BD
if(!ifs) ucTkWqG
return false; l46O=?usDX
N$p O] p
ostringstream oss; 0\u_\%[
istream_iterator<char> inpos(ifs); >4bOM@[]
istream_iterator<char> endpos; |`#[jHd
ostream_iterator<char> out(oss); 5PdC4vI*+
std::copy(inpos, endpos, out); )-[X^l
j
string& szData = oss.str(); NH4EsV]
tw^V?4[Miu
const char * cc = szData.c_str(); nLYyS#
// cout << (long)szData << endl; ~ 5`Ngpp
// cout << (long)oss.str().c_str() << endl; =w,%W^"E
cout<< cc; }k'8*v}8
>C@fSmnOM
return 0; QiY7m<3
} gn7pIoN
$yRbo'-
注意以上代码中红色部分没有写成: tWD*uAb
const char * cc = oss.str().c_str(); // error )p( XY34]
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 SrU,-mA W
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。