#include "stdafx.h" mbd
cGsxfwD
#include <iostream> \fU{$
#include <fstream> x7Ly,
#include <sstream> ILF"m;
#include <iterator> MJV&%E6{:{
using namespace std; 7x-k-F3
N iNZh;
int main(int argc, char* argv[]) 52l|
{ MY9?957F
ifstream ifs("test.txt"); Zi@?g IiX
if(!ifs) i3;Z:,A4NN
return false; z=>]E1'RL
A0O$B7ylQ
ostringstream oss; ;-^WUf|
istream_iterator<char> inpos(ifs); %'4dgk
istream_iterator<char> endpos; jDgiH}
ostream_iterator<char> out(oss); !j %)nU
std::copy(inpos, endpos, out); xfO!v>
string& szData = oss.str(); *qY`MW
N##3k-0Ao
const char * cc = szData.c_str(); $hn_4$
// cout << (long)szData << endl;
!&SUoa
// cout << (long)oss.str().c_str() << endl; gl.P#7X
cout<< cc; 2d<ma*2n(
_*bXVJ
]
return 0; 0>Ki([3
} ;N ]ElwP
IH[/fd0
注意以上代码中红色部分没有写成: r]BB$^@@V
const char * cc = oss.str().c_str(); // error :;{U2q+
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 qdZn9i
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。