#include "stdafx.h" 9&[\*{
ix+x3OCip
#include <iostream> 33S`aJ
#include <fstream> @) ]t8(
#include <sstream> ~M(pCSJ[
#include <iterator> a\|X^%2g
using namespace std; B)(w%\M4^
,P1G?,y
int main(int argc, char* argv[]) kfIbgya
{ JG1LS$p^
ifstream ifs("test.txt"); _4A&%>
if(!ifs) ]n/jJ_[
return false; r6/<&1[
s
UvKA0
ostringstream oss; ,7/\&X<`B
istream_iterator<char> inpos(ifs); 4v i B=>
istream_iterator<char> endpos; ol1AD: Ho
ostream_iterator<char> out(oss); ]dQZ8yVK
std::copy(inpos, endpos, out); |Yg}WHm
string& szData = oss.str(); <`b|L9
A`
oa|k!U
const char * cc = szData.c_str(); sV;qpDXX
// cout << (long)szData << endl; X]>[Qz)K^
// cout << (long)oss.str().c_str() << endl; K T"h74@
cout<< cc; <4S F~i
~n)]dFy
return 0; eq7C]i
rH
} W>UjUq);
IrUpExJ
注意以上代码中红色部分没有写成: 9 ?[4i'
const char * cc = oss.str().c_str(); // error rUhWZta
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 )Ep@$Gv|S
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。