#include "stdafx.h" _>Pk8~m
i&`!|X-=R
#include <iostream> GQN98Y+h
#include <fstream> lhqQCV
#include <sstream> XRa(sXA3
#include <iterator> pW\z\o/2
using namespace std; 4\M8BRuE
}[ ].\G\G
int main(int argc, char* argv[]) !?nu?
{ g96T*T
ifstream ifs("test.txt"); :peqr!I+K
if(!ifs) naz:A
return false; ^7u X$
Kax#OYLpg
ostringstream oss; K@HQrv<
istream_iterator<char> inpos(ifs); \a\= gn
istream_iterator<char> endpos; JO2xT#V
ostream_iterator<char> out(oss); `=79i$,,t
std::copy(inpos, endpos, out); -!cIesK;<
string& szData = oss.str(); !!FR[NK
9\v.qo.
const char * cc = szData.c_str(); ~m=$VDWm
// cout << (long)szData << endl; Z>8eD|m%2
// cout << (long)oss.str().c_str() << endl; "B#Y-
cout<< cc; A 4j<\xL
3gpo
%
return 0; c45tmul
} sAi&A9"*
OX+hZ<y
注意以上代码中红色部分没有写成: 6lsL^]7
const char * cc = oss.str().c_str(); // error *>k!hq;j
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Z,WubX<
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。