#include "stdafx.h" t Cb34Wpf
O?g;Ny
#include <iostream> @%fTdneH
#include <fstream> bN-!&Td
#include <sstream> .K84"Gdx
#include <iterator> lrZ]c:%k
using namespace std; :%&
E58
-TVwoK
int main(int argc, char* argv[]) EMP|I^
{ )Xqjl
ifstream ifs("test.txt");
g*a+$'
if(!ifs) O*v&CHd3
return false; vyDxX
_yg;5#3
ostringstream oss; wH8J?j"5>
istream_iterator<char> inpos(ifs); ,=\.L_'
istream_iterator<char> endpos; MrzD
ah9UG
ostream_iterator<char> out(oss); T^Ia^B-%}g
std::copy(inpos, endpos, out); )Zr\W3yWX
string& szData = oss.str(); >SQzE
"a].v 8l!
const char * cc = szData.c_str(); N
;=zo-8
// cout << (long)szData << endl; XfE0P(sE
// cout << (long)oss.str().c_str() << endl; %SB4_ r*<
cout<< cc; /pjl6dJ
t
7SS#V
return 0; z=KDkpV
} ]=t}8H
u
`/V1
注意以上代码中红色部分没有写成: +rU{-`dy9'
const char * cc = oss.str().c_str(); // error IDn<5#
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 q;bw}4
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。