#include "stdafx.h" ROb\Rxm
`BXS)xj
#include <iostream> $'wq1u
#include <fstream>
``K#}3
#include <sstream> q6d~V]4:
#include <iterator> ^QXbJJ
using namespace std; 1NLg _UBOK
2DDsWJ;
int main(int argc, char* argv[]) Fke//- R
{ "&+3#D
>
ifstream ifs("test.txt"); |V,<+BEi
if(!ifs) mEAXM1J|
return false; Sv[ 5NZn0&
L"+$Wc[|
ostringstream oss; ]ZoPQUS?
istream_iterator<char> inpos(ifs); t#E}NR
istream_iterator<char> endpos; wIvo"|%
ostream_iterator<char> out(oss); 4@3[
std::copy(inpos, endpos, out); Li{~=S@N*
string& szData = oss.str(); 5]Ajf;W\
JK_OZ
const char * cc = szData.c_str(); 5jcte<
5I_
// cout << (long)szData << endl; Q /x8 #X
// cout << (long)oss.str().c_str() << endl; qt e>r
cout<< cc; B9dt=j3j2
RVw9Y*]b
return 0; K95;rd
} }?@5W,
0ezYd S~o
注意以上代码中红色部分没有写成: +>f<EPGn
const char * cc = oss.str().c_str(); // error @ EuFJ=h
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 f:JlZ&
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。