#include "stdafx.h" l\HdB"nT
I5$P9UE+^9
#include <iostream> dhl[=Y`
Q
#include <fstream> BT$p~XB
#include <sstream> %\As
#include <iterator> \{,TpK.
using namespace std; yzA05 npTl
m7 =$*1k
int main(int argc, char* argv[]) GP|=4T}Bf
{ 1gEH~Jmj
ifstream ifs("test.txt"); OW:*qY c;:
if(!ifs) jcH@*c=%e
return false; nR!e(
^rkKE
dd
ostringstream oss; PxHFH pL
istream_iterator<char> inpos(ifs); !Brtao"m
istream_iterator<char> endpos; fCl}eXg6w
ostream_iterator<char> out(oss); ]Z JoC!u
std::copy(inpos, endpos, out); DHidI\*gT
string& szData = oss.str(); (JhX:1
c}x1-d8
const char * cc = szData.c_str(); X'9.fKp
// cout << (long)szData << endl; )&DAbB!O
// cout << (long)oss.str().c_str() << endl; =BsV`p7rU
cout<< cc; {Z.6\G&q
}2A6W%^>]
return 0; [&Xp]:M'D
} ^
k^y|\UtZ
97}]@xN=
注意以上代码中红色部分没有写成: BxY t*b%
const char * cc = oss.str().c_str(); // error h$>F}n
j
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 !,J#
r
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。