#include "stdafx.h" _1>SG2h{fV
SU%mmwES3
#include <iostream> YBX)eWslK
#include <fstream> q&zny2])
#include <sstream> )v%l0_z{
#include <iterator> iH-bo@
using namespace std; CO-Iar
2E^"r jLm
int main(int argc, char* argv[]) 9p<:=T
{ 7:n?PN(p6a
ifstream ifs("test.txt"); Wrmgu}q
if(!ifs) 5;W\2yj
return false; Q_ctX|.
m6b$Xyq[
ostringstream oss; _
XE;-weE
istream_iterator<char> inpos(ifs); WgE@8 9
istream_iterator<char> endpos; wJ6_I$>
ostream_iterator<char> out(oss); b-PSm=`
std::copy(inpos, endpos, out); -Q6(+(7_|
string& szData = oss.str(); r0>q%eM8
^_@r.y]
const char * cc = szData.c_str(); SOVjEo4'3
// cout << (long)szData << endl; 2(pLxVl
// cout << (long)oss.str().c_str() << endl; R7lYu\mA
cout<< cc; R.K?
0HqPyM13Q
return 0; 14mf}"z\
} lbRzx4=\y
;; :">@5
注意以上代码中红色部分没有写成: 5J
ySFG3
const char * cc = oss.str().c_str(); // error >-b&v $
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 >w9sE8i
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。