#include "stdafx.h" J'oDOn.M
R<"2%oY
#include <iostream> %tT"`%(+
#include <fstream> Z;ZuS[ZA
#include <sstream> T>d\%*Q+B
#include <iterator> C">`' G2
using namespace std; 3(1]FKZtt
b6 $,Xh
int main(int argc, char* argv[]) T!MZ+Ph`F
{ dZPW2yf
ifstream ifs("test.txt"); x>}B#
if(!ifs) )VNM/o%Q
return false; ARP KzF`Wq
10mK}HT>4B
ostringstream oss; 7$!yfMttu
istream_iterator<char> inpos(ifs); z8IPhE@
istream_iterator<char> endpos; }VF#\q
ostream_iterator<char> out(oss); 3pB}2]
std::copy(inpos, endpos, out); 8EOh0gk7
string& szData = oss.str(); GxxDY]!
N? M
const char * cc = szData.c_str(); b`$yqi<[
// cout << (long)szData << endl; lK0s=4c{
// cout << (long)oss.str().c_str() << endl; G3G/xC"
cout<< cc; e|yX QTlvL
W7t
>&3l
return 0; |~z3U>
} *P`v^&
xdPcsox~
注意以上代码中红色部分没有写成: YQ;
cJ$
const char * cc = oss.str().c_str(); // error )T9;6R$b
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 bG"HD?A_
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。