#include "stdafx.h" .Yxf0y?uv
?yAjxoE~?
#include <iostream> 4"Pf0PD:
#include <fstream> # |,c3$
#include <sstream> >2K:O\&
#include <iterator> >~\CiV4^
using namespace std; 7R>Pk9J
<_-8)abK
int main(int argc, char* argv[]) IHj9n>c)[
{ r~T3Ieb
ifstream ifs("test.txt"); 41\V;yib
if(!ifs) ?.,2EC=+
return false; w(nQ:;oC
Y !AQ7F
ostringstream oss; 7)y
+QU]
istream_iterator<char> inpos(ifs); .0]Odf:@
istream_iterator<char> endpos; 1)ZdkTF@H
ostream_iterator<char> out(oss); jLreN#:9
std::copy(inpos, endpos, out); #l_hiD`;r
string& szData = oss.str(); /` 4B-Y4M4
k_7agW
const char * cc = szData.c_str(); cy#N(S[ 1
// cout << (long)szData << endl; G1/
// cout << (long)oss.str().c_str() << endl; aTPmW]w6
cout<< cc; 1#^r5E4
XN~r d,MZ%
return 0; 5w@Q %'o`I
} rfhvd wwD
};]f 3
注意以上代码中红色部分没有写成: <k-hRs2d
const char * cc = oss.str().c_str(); // error $|}PL[aA#
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 }B2qtb3
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。