#include "stdafx.h" bxK1v7
}`\+_@w
#include <iostream> j ]F
Zy
#include <fstream> r[JgCj+$&
#include <sstream> {{SeD:hx
#include <iterator> l%rwJLN1
using namespace std; /t(dhz&xN
5! NK
int main(int argc, char* argv[]) km4::'(6
{ t/#[At5p=
ifstream ifs("test.txt"); 9#@dQ/*
if(!ifs) Q Y/36gK
return false; Zii<jZ.)<
[x'xbQLGd
ostringstream oss; Yhb=^)@))
istream_iterator<char> inpos(ifs); 3;>|*(cO
istream_iterator<char> endpos; :(!il?
ostream_iterator<char> out(oss); I.euuzBgA
std::copy(inpos, endpos, out); Wu,'S;>C
string& szData = oss.str(); bH~ue5q
qR--lvO
const char * cc = szData.c_str(); 7fgA)dU:K
// cout << (long)szData << endl; wMT?p/9Blm
// cout << (long)oss.str().c_str() << endl; K\`L>B. 1
cout<< cc; mflH &Bx9
!/BXMj,=
return 0; ?Xx,[Z&
} HUfH/x3zj]
bYYyXM
注意以上代码中红色部分没有写成: 3;u* _ ]N_
const char * cc = oss.str().c_str(); // error 0~<d<a -@
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 9axJ2J'g
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。