#include "stdafx.h" y;1
'hP&
6.|Qyk*
#include <iostream> wy)I6`v
#include <fstream> ?oKY"C8/
#include <sstream> nm3/-Q},
#include <iterator> xdqiogu e
using namespace std; D%k`udz<
?~g X7{>
int main(int argc, char* argv[]) ]EhU8bZ
{ (w+dB8)X
ifstream ifs("test.txt"); kCoTz"Z-
if(!ifs) N4z(2.
return false; K;fRDE){
UCv9G/$
ostringstream oss; XX@@tzN
istream_iterator<char> inpos(ifs); EoOB0zo}Y+
istream_iterator<char> endpos; `fA|])3T
ostream_iterator<char> out(oss); &-s/F`
std::copy(inpos, endpos, out); X?Yp=%%
string& szData = oss.str(); 1`;,_>8
9~FB^3Nz_
const char * cc = szData.c_str(); [p7cgHSMt
// cout << (long)szData << endl; }RT#V8oc
// cout << (long)oss.str().c_str() << endl; '=^$;3Z
cout<< cc; FSp57W$
eC71;"
return 0; m:{ws~
} TAl#V7PF}
*;]j#0
注意以上代码中红色部分没有写成: [l9iWs'M
const char * cc = oss.str().c_str(); // error b}eBy
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 ?mjQN|D
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。