#include "stdafx.h" nWl0R=
.XE]vo
#include <iostream> >L;O, {Px-
#include <fstream> Ucy9fM
#include <sstream> ;C{_T:LS
#include <iterator> *AA1e}R{B
using namespace std; #rC/y0niH
\bsm#vY,
int main(int argc, char* argv[]) vOj$-A--qU
{ d{trO;%#f
ifstream ifs("test.txt"); LtU+w*Gj
if(!ifs) wS^-o
return false; v6n(<0:
T*ic?!
ostringstream oss; c"$_V[m
istream_iterator<char> inpos(ifs); -)Vj08aP
istream_iterator<char> endpos; [<`+9R
ostream_iterator<char> out(oss); Aa Ma9hvT!
std::copy(inpos, endpos, out); 0x &^{P~
string& szData = oss.str(); 'oEmbk8Hg
$+);!?^|:
const char * cc = szData.c_str(); >@%!r
// cout << (long)szData << endl; x('yBf
// cout << (long)oss.str().c_str() << endl; l^"G \ZVI
cout<< cc; 8(I"C$D!k
z? aDOh
return 0; @gj5'
} (BGipX4
w}i.$Qt
注意以上代码中红色部分没有写成: >6dgf`U
const char * cc = oss.str().c_str(); // error aF=VJ+5
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 [y:LA~q
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。