#include "stdafx.h" 4rkj$
vX|i5P0)8
#include <iostream> s*%pNE U
#include <fstream> h\C" ti2
#include <sstream>
%T9'dcM
#include <iterator> kB~KC-&O
using namespace std; K(bid0Y
e<F>u#d
int main(int argc, char* argv[]) MP"Pqt
{ hH Kd+QpI
ifstream ifs("test.txt"); `s[77V>
if(!ifs) 7nr+X Os
return false; iIrH&}2
6,Aj5jG
ostringstream oss;
:)7{$OR&
istream_iterator<char> inpos(ifs); $TU)O^c
istream_iterator<char> endpos; mx\b6w7
ostream_iterator<char> out(oss); jm~(OLg
std::copy(inpos, endpos, out); D9.H<.|36
string& szData = oss.str(); -<e8\ Z`
TNgf96)
y
const char * cc = szData.c_str(); "h.-qQGU%
// cout << (long)szData << endl; B,rpc\_
// cout << (long)oss.str().c_str() << endl; ZWJ%t'kF
cout<< cc; `*?8<Vm
Wp5w}8g
return 0; W>jgsR79M
} yx v]G6
uh,~CvXU]
注意以上代码中红色部分没有写成: >wsS75n1
const char * cc = oss.str().c_str(); // error T\}?
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 t4HDt\}&k~
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。