#include "stdafx.h" UP?]5x>
tIJ?caX5=
#include <iostream> `j1(GQt
#include <fstream> ?V>{3
#include <sstream> ;c;5O@R}3
#include <iterator> ouO<un
using namespace std; AC& }8w[>u
%hO/2u
int main(int argc, char* argv[]) Uc>$w?oA
{ ~Q36lR
ifstream ifs("test.txt"); WAWy3i
if(!ifs) T
7EkRcb
return false; !y 7SCz
g
d|Q_Z@;JF
ostringstream oss; |',$5!:0O
istream_iterator<char> inpos(ifs); H}}g\|r&
istream_iterator<char> endpos; %"{jNC?
ostream_iterator<char> out(oss); n k@e#
std::copy(inpos, endpos, out); sn=_-uoU
string& szData = oss.str(); _A5.
k6|wiSyu
const char * cc = szData.c_str(); X@cO`P
// cout << (long)szData << endl; 2F-
]0kGR|
// cout << (long)oss.str().c_str() << endl; .e|VW)
cout<< cc; J3P)oM[
G;k#06
return 0; 6B .x=
} z&@O\>Q
"T0s7LWp
注意以上代码中红色部分没有写成: i*9Bu;
const char * cc = oss.str().c_str(); // error SZ )AO8&
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。
,]* MI"
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。