#include "stdafx.h" Dx[t?-
d*,|?Ar*b
#include <iostream> "v3u$-xN1
#include <fstream> X6<HNLgra
#include <sstream> GW{Nc!)
#include <iterator> {+t'XkA
using namespace std; r/O(EW#=8
"=f*Lk@[
int main(int argc, char* argv[]) <$njU=YE&
{ >8tE`2[i*
ifstream ifs("test.txt"); sinG $=
if(!ifs) `u-VGd\
return false; :WCUHQ+
(lPNMS|V
ostringstream oss; f3l >26
istream_iterator<char> inpos(ifs); xHr
istream_iterator<char> endpos; Y!*,G]7
ostream_iterator<char> out(oss); Z gU;=.
std::copy(inpos, endpos, out); ohM'Fx"q
string& szData = oss.str(); u%[*;@;9+
iZyk2kc
const char * cc = szData.c_str(); ,.}PZL
// cout << (long)szData << endl; puqH%m+u
// cout << (long)oss.str().c_str() << endl; (%fGS.TR
cout<< cc; *,-YWx4
ci^-0l_O
return 0; b]g.>$[nX
} ga~vQ7I_
P|(J]/
注意以上代码中红色部分没有写成: 2iG(v._x
const char * cc = oss.str().c_str(); // error 7T2W%JT-,
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 i~F Ct4
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。