#include "stdafx.h" t..@69
g3(?!f
#include <iostream> B@vup {Kg
#include <fstream> !ZN"(0#qz
#include <sstream> 'sjks sy.3
#include <iterator> 3"6-X_
using namespace std; R
<u\
-
Xpmi(~n
int main(int argc, char* argv[]) 4?x$O{D5?{
{ &y2DI"Ff
ifstream ifs("test.txt"); x Sv@K5"8!
if(!ifs)
lR]SGdY
return false; s:sk`~2<gd
c/G^}d%
ostringstream oss; w 1O)
istream_iterator<char> inpos(ifs); 8{-bG8L> 5
istream_iterator<char> endpos; vqwSOh|P9
ostream_iterator<char> out(oss); #X<s_.7DJ
std::copy(inpos, endpos, out); )-LSn
string& szData = oss.str(); ZV:0:k.x
(ZK(ODn)i
const char * cc = szData.c_str(); ur/:aI
// cout << (long)szData << endl; `lE8dwL
// cout << (long)oss.str().c_str() << endl; L?hWH0^3
cout<< cc; }RkD7
S#Pni}JD
return 0; Q"`J-#L
} .iEzEmu
Io)@u~yz
注意以上代码中红色部分没有写成: g
_u
const char * cc = oss.str().c_str(); // error 8.D9OpU
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 J|o )c~
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。