#include "stdafx.h" gS]@I0y8
.
&n}f?
#include <iostream> qCpp6~]Um
#include <fstream> }1i`6`y1
#include <sstream> VfC <WVYiZ
#include <iterator> &zeyE;/Hj
using namespace std; ][h%UrV
_w+:Dv~*a
int main(int argc, char* argv[]) ?u=Fj_N_
{ j8{i#;s!"
ifstream ifs("test.txt"); qqr?!vem6
if(!ifs) f:|1_ j
return false; J1RJ*mo7,
J76kkW`5
ostringstream oss; QIvVcfM^
istream_iterator<char> inpos(ifs); {e9@-
istream_iterator<char> endpos; JZ*/,|1}EC
ostream_iterator<char> out(oss); BmMGx8P
std::copy(inpos, endpos, out); u9GQU
string& szData = oss.str(); L<-_1!wh
FvXZ<(A{
const char * cc = szData.c_str(); \[_t]'p
// cout << (long)szData << endl; a /l)qB#
// cout << (long)oss.str().c_str() << endl; {9;CNsd
cout<< cc; >#~& -3
_w(7u(Z
return 0; cr?Q[8%t1
} (\hx` Yh=>
7#ibN!
注意以上代码中红色部分没有写成: q#ClnG*
const char * cc = oss.str().c_str(); // error Ou!2[oe@M
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 X0H!/SlS
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。