#include "stdafx.h" nd/.]"
9!06R-h
#include <iostream> O A9G]
8k
#include <fstream> 5*W<6ia
#include <sstream> F ak"u'~
#include <iterator> =`MU*Arcs[
using namespace std; Lu@'Ee!>G
N}tiaL4
int main(int argc, char* argv[]) QirS=H+~
{ h (1 }g/
ifstream ifs("test.txt"); pZv>{=2hOS
if(!ifs) \P` mV9P
return false; aV'r
oxM
2PSt*(
ostringstream oss; 6#rj3^]
istream_iterator<char> inpos(ifs); j >wT-s
istream_iterator<char> endpos; 8QYM/yAM
ostream_iterator<char> out(oss); wpLC,
std::copy(inpos, endpos, out); )m7 Y o
string& szData = oss.str(); PLmf.hD \
v!EE[[
const char * cc = szData.c_str(); uNn]hl|x
// cout << (long)szData << endl; .}.63T$h9
// cout << (long)oss.str().c_str() << endl; 5,<:|/r
cout<< cc; ;.<0ln V
aJi0!6oy
return 0; yxt`
} CkJ\v%JAW
c<gvUVHIxR
注意以上代码中红色部分没有写成: _PR><L_
const char * cc = oss.str().c_str(); // error OAhCW*B
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 bq<DW/
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。