#include "stdafx.h" R
iLqMSq
`q\v~FT
#include <iostream> &Dp&
#include <fstream> NY[48H
#include <sstream> B(-F|q\
#include <iterator> ecp0 hG`%
using namespace std; q7rX4-G$
lKRp9isn^
int main(int argc, char* argv[]) fv>Jn`
{ %uP/v\l
ifstream ifs("test.txt"); `\BBdQ#bH
if(!ifs) 7d_"4;K)
return false; :c[T@[
oye/tEMG
ostringstream oss;
pG /g
istream_iterator<char> inpos(ifs); yW"}%)
d
istream_iterator<char> endpos; 4tapQgj24
ostream_iterator<char> out(oss); diw5h};W
std::copy(inpos, endpos, out); Mw;^`ZxT
string& szData = oss.str(); o3OJI_
v&
VOmS>'$
const char * cc = szData.c_str(); `-rtU
// cout << (long)szData << endl; 4)N~*+~\h
// cout << (long)oss.str().c_str() << endl; JQ\o[t
cout<< cc; O=Vj*G,
xz/G$7q7
return 0; 57U;\L;ZmZ
} q1%xk=8
{JcMJZ3
注意以上代码中红色部分没有写成: JCITIjD7=
const char * cc = oss.str().c_str(); // error YdAC<,e&A
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 d[ce3':z
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。