#include "stdafx.h" k91ctEp9>
T6
K?Xr{_
#include <iostream> aSu6SU
#include <fstream> ifo^
M]v
#include <sstream> *-KgU'u?
#include <iterator> cmw2EHTT<
using namespace std; mkJC*45
B@R3j
int main(int argc, char* argv[]) ze%kP#c6!
{ `RRC8 ]l
ifstream ifs("test.txt"); #LP38wE
if(!ifs) KY1(yni&8[
return false; D%tcYI(
(%\vp**F
ostringstream oss; )v1y
P
istream_iterator<char> inpos(ifs); %RlG~a
istream_iterator<char> endpos; +
?z=,')
ostream_iterator<char> out(oss); 'QR
@G
std::copy(inpos, endpos, out); fc}G6P;3{
string& szData = oss.str(); HM'P<<
3['aK|qk.
const char * cc = szData.c_str(); :/F=j;o
// cout << (long)szData << endl; }sbh|#
// cout << (long)oss.str().c_str() << endl; V$D+Joj
cout<< cc; mM6g-)cV
{*/&`$0lH|
return 0; g;N)K3\2
} 80i-)a\n
7=$@bHEF#*
注意以上代码中红色部分没有写成: *$
const char * cc = oss.str().c_str(); // error );8Nj
zX1
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 OxGS{zs
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。