#include "stdafx.h" ^~dBO%M^
Ui:WbH<b{
#include <iostream> irZMgRQAT
#include <fstream>
p"l GR&b
#include <sstream> ,#/%Fn%T
#include <iterator> ERka l7+
using namespace std; LpV2XL$p>#
10gh4,z[
int main(int argc, char* argv[]) D5Z@6RVt
{ -q&K9ZCl`
ifstream ifs("test.txt"); G+5_I"`W
if(!ifs) As}3VBd
return false; ?ZF~U
{e35O(Y
ostringstream oss; `eo$o!
istream_iterator<char> inpos(ifs); r$Gz
istream_iterator<char> endpos; ,_wpYTl*X
ostream_iterator<char> out(oss); H^TU?vz}
<
std::copy(inpos, endpos, out); %2q0lFdcM
string& szData = oss.str(); 5u5-:#sLy
4`X]$.
const char * cc = szData.c_str(); VoG_'P
// cout << (long)szData << endl; OTy{:ID
// cout << (long)oss.str().c_str() << endl; ":I@>t{H*
cout<< cc; R(t1Ei.-?
$c1zMkY)u
return 0; 2%{(BT6
} 2h;#BJ))
a62'\wF>D
注意以上代码中红色部分没有写成: NsJ]Tp5!
const char * cc = oss.str().c_str(); // error $*\GZ$y>
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 /s~(? =qYH
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。