#include "stdafx.h" V3mAvmx
%c)[
kAU!
#include <iostream> \Ey~3&x9f
#include <fstream> Dr;iQkGP
#include <sstream> ] xd^% q*
#include <iterator> u
=gt<1U
using namespace std; 1b9hE9a{j
6bBdIqGb}
int main(int argc, char* argv[]) 'lZ.j&
{ /=?ETth @
ifstream ifs("test.txt"); H.G!A6bd
if(!ifs) NcCvm#
return false; }`yiT<z
f f 7(
ostringstream oss; V,EF'-F
istream_iterator<char> inpos(ifs); nY $tp
istream_iterator<char> endpos; iq*A("pU
ostream_iterator<char> out(oss); UofTll)
std::copy(inpos, endpos, out); ^zEE6i
string& szData = oss.str(); 7~M<cD
eo^/c+FG
const char * cc = szData.c_str(); $j)hNWI
// cout << (long)szData << endl; 2AVc?
9@
// cout << (long)oss.str().c_str() << endl; XN,,cU
cout<< cc; F^!mI7Z|(2
@/%{15s.
return 0; <5@PWrU?[[
} nW?R"@Zm
69#8Z+dw7
注意以上代码中红色部分没有写成: HEA eo!
const char * cc = oss.str().c_str(); // error >5T_g2pkv
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 2=ztKfsBhE
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。