#include "stdafx.h" l0[jepmpiT
)"|g&=
#include <iostream> Bn47O~
#include <fstream> `%F.]|Y0
#include <sstream> Qe]@`Vg
#include <iterator> Vx-HW;,
using namespace std; ]?mWnEi!z
QoI@/
jLj
int main(int argc, char* argv[]) :NS;y-{^^y
{ }"Y]GH4Y
ifstream ifs("test.txt"); nN/v7^^
if(!ifs) GeZwbJ/?B
return false; g#5g0UP)V
HIi"zo=V
ostringstream oss; &=t$
AIu
istream_iterator<char> inpos(ifs); BI,K?D&W-
istream_iterator<char> endpos; 7f[nNng
ostream_iterator<char> out(oss); A
CJmy2
std::copy(inpos, endpos, out); BJ~Q\Si6
string& szData = oss.str(); ~F>oNbJIv
kzgHp,;R{
const char * cc = szData.c_str(); )v8;\1`s:
// cout << (long)szData << endl; NzNAhlXj3
// cout << (long)oss.str().c_str() << endl; qV8;;&8r
cout<< cc; S
#&HB
h'w9=Pk~6y
return 0; 8~\Fpz|Og
} qs 52)$
Zdj~B1
注意以上代码中红色部分没有写成: ;Z
C18@
const char * cc = oss.str().c_str(); // error GAtK1%nPD
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 mmr>"`5.
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。