#include "stdafx.h" Sn!5/9Y
N.@@ebuE
#include <iostream> 1A.e cv'
#include <fstream> I&G"{Dl94
#include <sstream> ?."YP[;
#include <iterator> ~V6wcXd
using namespace std; n(tx'&U"R
L:E?tR}H
int main(int argc, char* argv[]) eT6T@C](
{ FA3YiX(-e
ifstream ifs("test.txt"); q,v)X
if(!ifs) 9S]]KEGn4
return false; Cmj+>$')0
"8sB,$
ostringstream oss; 7S]<?>*
istream_iterator<char> inpos(ifs); 1'"TO5
istream_iterator<char> endpos; _[t:Vme}v
ostream_iterator<char> out(oss); 7@uhw">mX
std::copy(inpos, endpos, out); @X g5E
string& szData = oss.str(); o{?R z3z
4RoE>m1[G
const char * cc = szData.c_str(); g,]GzHV1
// cout << (long)szData << endl; Ek%mX"
// cout << (long)oss.str().c_str() << endl; XlDN)b5v{
cout<< cc; `4kVe= {
GP{$w_'!J0
return 0; @m+2e C77
} %29lDd(<
B
EB[K2[9
注意以上代码中红色部分没有写成: !)$e+o^W
const char * cc = oss.str().c_str(); // error @\s*f7
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 <Po$|$_~
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。