#include "stdafx.h" vz#wP
Rr;LV<q+
#include <iostream> {cyo0-9nv
#include <fstream> V.QzMF"o
#include <sstream> L3=YlX`UL
#include <iterator> <&Y}j&(
using namespace std; >gZk
581/
bHQKRV
int main(int argc, char* argv[]) )<x;ra^
{ X?v^>mA
ifstream ifs("test.txt"); 5)>ZO)F&
if(!ifs) qnk,E-
return false; 7ru9dg1?
ZaUcP6[h
ostringstream oss; ?m9UhLeaS=
istream_iterator<char> inpos(ifs); Va/@#=,q]
istream_iterator<char> endpos; K,C$J
I
ostream_iterator<char> out(oss); M\?uDC9
std::copy(inpos, endpos, out); b6WC@j`*T
string& szData = oss.str(); 6|9g4@Hy
?<yq 2`\4O
const char * cc = szData.c_str(); peTO-x^a-
// cout << (long)szData << endl; n"<GJ.{
// cout << (long)oss.str().c_str() << endl; jQ_|z@OV
cout<< cc; 4z0R\tjT
w1"gl0ga$
return 0; M8",t{7
} 8NAWA3^B
XC/]u%n8](
注意以上代码中红色部分没有写成: X\3,NR,
const char * cc = oss.str().c_str(); // error |!xfIR>=F
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 [`zbf_RyO
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。