#include "stdafx.h" 5Bcmz'?!
b%VBSNZ
#include <iostream> aorL ,l
#include <fstream> AB!({EIi
#include <sstream> T5@t_D>8
#include <iterator> +=`w
using namespace std; {3Gj
rE
*~`oA~-Q
int main(int argc, char* argv[]) qvsfU*wo?
{ Z(E.F,k
ifstream ifs("test.txt"); fk#Ggp<
if(!ifs) U ;4;>
return false; Q1h v2*/U
Ux,dj8=o
ostringstream oss; &=8ZGjR< }
istream_iterator<char> inpos(ifs); <!u(_Bxw/
istream_iterator<char> endpos; ^[HX#JJ~
ostream_iterator<char> out(oss); |bRi bB
std::copy(inpos, endpos, out); ZZL%5{w_
string& szData = oss.str(); Y\H4.$V
xAsy07J?
const char * cc = szData.c_str(); .<P@6Jq
// cout << (long)szData << endl; esTK4z]
// cout << (long)oss.str().c_str() << endl; e?aSM
cout<< cc; sx9[#6~{Y
(ds*$]
return 0; fQU_A
} <
Lrd(b;
Erl@]P4
注意以上代码中红色部分没有写成: WsM/-P1Y
const char * cc = oss.str().c_str(); // error gn 9CZ
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 YkV-]%c
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。