#include "stdafx.h" 6d/Q"As
"P#1=
#include <iostream> z]rr
Q=dAA
#include <fstream> Lfi6b%/z
#include <sstream> NjZ~b/
#include <iterator> hsY?og_H
using namespace std; SWx: -<
>Y8\f:KQ
int main(int argc, char* argv[]) fWq*Op.]c
{ }NyQ<,+mq&
ifstream ifs("test.txt"); (o IGp
if(!ifs) 2kDY+AN;
return false; :p}8#rb
8 5ET$YV
ostringstream oss; F<b'{qf"
istream_iterator<char> inpos(ifs); 2rT^OGw6
istream_iterator<char> endpos; =[]6NjKS,
ostream_iterator<char> out(oss); {rR(K"M
std::copy(inpos, endpos, out); 0c`zg7|
string& szData = oss.str(); M{5AQzvs
\t=0rFV)t
const char * cc = szData.c_str(); "."(<c/3
// cout << (long)szData << endl; ~C%I'z'
// cout << (long)oss.str().c_str() << endl; -JgNujt#9
cout<< cc; L>~Tc
3:nBl?G<
return 0; j~{cT/5Y_
} =XR6rR8
z4SJxL
注意以上代码中红色部分没有写成: edo )W
mn
const char * cc = oss.str().c_str(); // error ~i;{+j6Ho!
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 <r:AJ;
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。