#include "stdafx.h" Bh?K_{e
wmdvAMN
#include <iostream> LL@VR#n"V
#include <fstream> J4!Om&\@
#include <sstream> iZ2|/hnw
#include <iterator> &S9Sl
using namespace std; 9cud CF
,2S w6u
int main(int argc, char* argv[]) j+NOT`&
{ ((F[]<?
ifstream ifs("test.txt"); Ol3$!x9
if(!ifs) B;?)
return false; X(kyu,w
O0Y/y2d
ostringstream oss; #FKo:id`K
istream_iterator<char> inpos(ifs); We%-?l:"
istream_iterator<char> endpos; Q.Uyl:^PxU
ostream_iterator<char> out(oss); 0\#uxzdhJ
std::copy(inpos, endpos, out); DZKVZ_q
string& szData = oss.str(); O?|opD
5fuOl-M0W
const char * cc = szData.c_str(); DJP)V8]!B
// cout << (long)szData << endl; 6T0[
~@g5
// cout << (long)oss.str().c_str() << endl; 9MA/nybI
cout<< cc; v`evuJ\3
eU?SLIof[{
return 0; H~JPsS;
} .q#2 op
hGyi@0
注意以上代码中红色部分没有写成: c<)C3v
const char * cc = oss.str().c_str(); // error :J` *@cDn
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 |uVhfD=NG
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。