#include "stdafx.h" gmCW__oR
y r4j
#include <iostream> g43j-[j)
#include <fstream> ,tt
.oF|
#include <sstream> 5m.{ayE
#include <iterator> _G$SA-W(
using namespace std; pN\YAc*@:
hLs<g!*O
int main(int argc, char* argv[]) x2q6y
{ 9\yGv
ifstream ifs("test.txt"); "c0I2wq
if(!ifs) Uavr>-
return false; yH\3*#+
'VgdQp$L$
ostringstream oss; M
@|n"(P
istream_iterator<char> inpos(ifs); IJWUNKqo=
istream_iterator<char> endpos; uL\b*rI
ostream_iterator<char> out(oss); jkTh)Bm|'
std::copy(inpos, endpos, out); Se0!-NUK0
string& szData = oss.str(); 2kP0//
y.xt7
F1
const char * cc = szData.c_str(); }6Ut7J]a|
// cout << (long)szData << endl;
1z .
// cout << (long)oss.str().c_str() << endl; AXnuXa(j
cout<< cc; FU{$oCh/5
*wH.]$
return 0; I:~KF/q
} /G{;?R
{B!LhvYAH
注意以上代码中红色部分没有写成: H@+1I?l
const char * cc = oss.str().c_str(); // error K;:_UJ>t
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 7H$I9e
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。