#include "stdafx.h" 3\4e{3$
e|:\Ps `8
#include <iostream> lusUmFm'*
#include <fstream> Ms +ekY)
#include <sstream> %0 {_b68x
#include <iterator> U]}F A2
using namespace std; va_u4
0^tY|(b3/M
int main(int argc, char* argv[]) ;6 W[%{
{ C-S>'\|8
ifstream ifs("test.txt"); I4%kYp]
if(!ifs) p*5_+u
return false; )NhC+=N
d+G%\qpzQ
ostringstream oss; )#z{P[X^
istream_iterator<char> inpos(ifs); ]e),#_M
istream_iterator<char> endpos; R~iv%+
ostream_iterator<char> out(oss); ;^bfLSWm{
std::copy(inpos, endpos, out); ]QHp?Ii1
string& szData = oss.str(); ?7V~>i8[
D'u7"^=
const char * cc = szData.c_str(); y+k^CT/u
// cout << (long)szData << endl; f6K.F
// cout << (long)oss.str().c_str() << endl; _ f";zd
cout<< cc; xi{r-D8Z
)%S@l<%@?
return 0; {e|.AD
} (_4DZMf
?R)dxuj
注意以上代码中红色部分没有写成: ?e6>dNw
const char * cc = oss.str().c_str(); // error O!nS3%De
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 s!?uLSEdb
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。