#include "stdafx.h" Nk\ni>Du3
'do2n/
#include <iostream> z;9D[ME#1
#include <fstream> j96}E/gF
#include <sstream> }qp)VF
#include <iterator> $X Uck[
using namespace std; (#>X*~6
QbHX.:C
int main(int argc, char* argv[]) pl@K"PRE
{ ZoJqJWsd
ifstream ifs("test.txt"); |H^v8^%>zm
if(!ifs) jGkDD8K [
return false; ,Il) t H
\ Qx%76
ostringstream oss; <Bn0wr8)\
istream_iterator<char> inpos(ifs); p JF
9Z
istream_iterator<char> endpos; !a\v)R
ostream_iterator<char> out(oss); [6g$;SicT
std::copy(inpos, endpos, out); i; ]0>g4
string& szData = oss.str(); \/ri|fm6l#
q~aj"GD
const char * cc = szData.c_str(); _\k?uUo&,^
// cout << (long)szData << endl; Y[PC<-fyf
// cout << (long)oss.str().c_str() << endl; *mj=kJ7(
cout<< cc; V+lS\E.
q!U$\Q&
return 0; 5cA:;{z];g
} G!C }ULq
58HAl_8W
注意以上代码中红色部分没有写成: E6xdPjoWy
const char * cc = oss.str().c_str(); // error kFkI[WKyZ
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 uUq= L
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。