#include "stdafx.h" @PEFl"
Y%.o
TB&
#include <iostream> c Mgd
#include <fstream> #wI}93E
#include <sstream> d+
jX49Vt
#include <iterator> _x!idf
using namespace std; a%T`c/C
#;]#NqFX
int main(int argc, char* argv[]) X.eOw>.
{ h0'*)`;z
ifstream ifs("test.txt"); vR!+ 8sy$
if(!ifs) JaCX}[R
return false; m&:&z7^p
zj1~[$
(
ostringstream oss; {>
YsrD C
istream_iterator<char> inpos(ifs); Io1j%T#ZT
istream_iterator<char> endpos; 7nek,8b
ostream_iterator<char> out(oss); P:"R;YCvE
std::copy(inpos, endpos, out); s-$Wc)l
string& szData = oss.str(); i6WH^IQ M
nm-
const char * cc = szData.c_str(); 2.D2
o
// cout << (long)szData << endl; wq$$.
.E
// cout << (long)oss.str().c_str() << endl; cZYy+
cout<< cc; zm"
n#lbfN 4
return 0; 9D T<
} @C)s4{V
jE\G_>
注意以上代码中红色部分没有写成: Alxf;[s
const char * cc = oss.str().c_str(); // error BNfj0e 5b
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 V\cbIx(Z^
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。