#include "stdafx.h" .O'~s/h
@@U
#include <iostream> >A X_"Q~
#include <fstream> ZCj1Cz]"l<
#include <sstream> SyI~iW#Y1
#include <iterator> Qt{){uE
using namespace std; mY/"rm
Q"~%T@e
int main(int argc, char* argv[]) oF>`>
{ Z\`SDC
ifstream ifs("test.txt"); |yO%w #
if(!ifs) /eH37H
return false; VnkhY
?xH{7)dO
ostringstream oss; wU!-sf;]y
istream_iterator<char> inpos(ifs); BXU0f%"8U
istream_iterator<char> endpos; EK=0oy[
ostream_iterator<char> out(oss); (?8i^T?WP=
std::copy(inpos, endpos, out); ru2M"]T
string& szData = oss.str(); EC8Z. Uu
8)?&eE'
const char * cc = szData.c_str(); n0co*
]X+k
// cout << (long)szData << endl; x$` lQ%
// cout << (long)oss.str().c_str() << endl; b<4nljbx
cout<< cc; !`H{jwH
/"st
sF
return 0; jQm~F`z
} NYP3u_
QX
~Yg)8
注意以上代码中红色部分没有写成: +@!\3a4!
const char * cc = oss.str().c_str(); // error \RR`
F .7
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 )'f=!'X
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。