#include "stdafx.h" "$N$:B @U
=oVC*b
#include <iostream> ^zTe9:hz/\
#include <fstream> &w9*pJR %
#include <sstream> Y-8BL
#include <iterator> v#gXXO[P1
using namespace std; B.=n U
(1cB Tf
int main(int argc, char* argv[]) " O
r1 fC
{ h1?xfdvGd
ifstream ifs("test.txt"); 8Dl(zY K;
if(!ifs) }bRn&)e
return false; ITl>HlS
p9jC-&:
ostringstream oss; yT:2*sZRc
istream_iterator<char> inpos(ifs); WZ`i\s1#
istream_iterator<char> endpos; ~rb]u
Ny-
ostream_iterator<char> out(oss); GH':Yk
std::copy(inpos, endpos, out); 4IW
fp&Q!
string& szData = oss.str(); --diG$x.
>!qtue7B
const char * cc = szData.c_str(); CF3x\6.q}
// cout << (long)szData << endl; Syseiw
// cout << (long)oss.str().c_str() << endl; _8 r'R
cout<< cc; q{V e%8$"
/t`|3Mw
return 0; e<uf)K=(C
} 0,-]O=
X9PbU1o;
注意以上代码中红色部分没有写成: @-K[@e/uwy
const char * cc = oss.str().c_str(); // error ;07$ G+['
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 %h(%M'm?
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。