#include "stdafx.h" }*xC:A%aS
~l;yr
@
#include <iostream> bMSD/L
#include <fstream> 8W(<q|t
#include <sstream> w g$D@E7
#include <iterator> V;M3z9xd
using namespace std; l
:f9Ih
7~nIaT
int main(int argc, char* argv[]) ['/;'NhdlY
{ VC/R)%@%
ifstream ifs("test.txt"); hdo+Qezu:
if(!ifs) }".\
4B$n
return false; tpN]evp|
B)(p9]q
ostringstream oss; jXc5fXO
N
istream_iterator<char> inpos(ifs); d,Hf-zJ%~
istream_iterator<char> endpos; j4.Qvj >:4
ostream_iterator<char> out(oss); $I?=.:<+
std::copy(inpos, endpos, out); V`WI"HO+
string& szData = oss.str(); gn-=##fT:i
(2\l i{$e
const char * cc = szData.c_str(); `=_7I?
// cout << (long)szData << endl; 0L3Bo3:k
// cout << (long)oss.str().c_str() << endl; gubb .EY
cout<< cc; =YS!soO
8Uj68Jl?
return 0; 0S)"Q^6ny
} ek Y?
q$e
T!'x
注意以上代码中红色部分没有写成: $K=K?BV[
const char * cc = oss.str().c_str(); // error $#6Fnhh}
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 k+W
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。