#include "stdafx.h" "> 4[+'
\)6?u_(u
#include <iostream> 6I6ZVSxb
#include <fstream> zDQ\PZ~
#include <sstream> b^=8%~?%4
#include <iterator> k Y |=a
using namespace std; >5z`SZf
g275{2G9
int main(int argc, char* argv[]) X|QX1dl
{ w|U@jr*H]
ifstream ifs("test.txt"); TJGKQyG$L
if(!ifs) tX2>a
return false; W3{5Do.h
m`4j|5
ostringstream oss; & /FA>
istream_iterator<char> inpos(ifs); 0%L$TJ.''
istream_iterator<char> endpos; Gm?"7R.
ostream_iterator<char> out(oss); {7MgN'4
std::copy(inpos, endpos, out); ywa .cq
string& szData = oss.str(); eC1c`@C:
EPUJa~4
const char * cc = szData.c_str(); [7t0[U~3?
// cout << (long)szData << endl; <a/ZOuBzZ
// cout << (long)oss.str().c_str() << endl; ;{)@ghD
cout<< cc; :WKyEt!3
,C12SM*@
return 0; (V|q\XS
} Yv`1ySR
]H@uuPT!
注意以上代码中红色部分没有写成: (G b{ckzs
const char * cc = oss.str().c_str(); // error hE3jb.s(>
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 w}KcLaI
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。