#include "stdafx.h" T , =ga
s/[i>`g/9
#include <iostream> BH0rT})
#include <fstream> SEchF"KJQF
#include <sstream> BHmA*3?
#include <iterator> W7A'5
using namespace std; 4Sg!NPuu7&
cM4?Ggn
int main(int argc, char* argv[]) \| >eG u
{ ^qbX9.\
ifstream ifs("test.txt"); +$>ut
r
if(!ifs) ):78GVp
return false; 5 J|;RtcR
gSj-~kP
ostringstream oss; CHpDzG>]4
istream_iterator<char> inpos(ifs); %,,h )9
istream_iterator<char> endpos; t=\V&,
ostream_iterator<char> out(oss); wHZ!t,g
std::copy(inpos, endpos, out); R~*Y@_oD
string& szData = oss.str(); r-YQsu&
Vd<=
y
const char * cc = szData.c_str(); [bPE?_a,
// cout << (long)szData << endl; J-PzI FWd
// cout << (long)oss.str().c_str() << endl; <vt^=QA'
cout<< cc; G^mk<pH
'v|2}T*
return 0; ^RWt
} P'9aZd
om_&|9B)
注意以上代码中红色部分没有写成: h.=B!wKK
const char * cc = oss.str().c_str(); // error uWnS<O
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ['km'5uZ^
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。