#include "stdafx.h" e#MEDjm/)g
Mj2o>N2,
#include <iostream> c0.i
#include <fstream> o;+$AU1f
#include <sstream> ;ZMm6o
#include <iterator> s+;J`_M
using namespace std; l(Dkmt>^
a%a_sR\)
int main(int argc, char* argv[]) %y{#fZHc
{ =Jd('r
ifstream ifs("test.txt"); 3A'vq2beM
if(!ifs) s*.CJ
return false; XS5*=hv:
,b2YUb]U
ostringstream oss; 7yGc@kJ?
istream_iterator<char> inpos(ifs); j^
VAA\
istream_iterator<char> endpos; _zq"<Q c
ostream_iterator<char> out(oss); u/3[6MIp
std::copy(inpos, endpos, out); iO)FZ%?"
string& szData = oss.str(); s*<\mwB
8C1 ' g7A<
const char * cc = szData.c_str(); RM8p[lfX
// cout << (long)szData << endl; 'xi[- -
// cout << (long)oss.str().c_str() << endl; ;Ll/rJ:*
cout<< cc; G j^J pG
`,XCD-R^
return 0;
]3Z?Q
} WVUa:_5{
c+:LDc3!Gb
注意以上代码中红色部分没有写成: m%Ah]x;
const char * cc = oss.str().c_str(); // error AsyJDt'i
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 B -XM(Cj
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。