#include "stdafx.h" L+v8E/W
?y+\v'3v
#include <iostream> i)A`Vpn
#include <fstream> P}ehNt*($
#include <sstream> R1]v}f_I"
#include <iterator> 3N(8|wh
using namespace std; 0SAG6k~x
!O 0ZD4/{4
int main(int argc, char* argv[]) 34"{rMbQ
{ `=_7I?
ifstream ifs("test.txt"); 0L3Bo3:k
if(!ifs) gubb .EY
return false; =YS!soO
Y9z:xE
ostringstream oss;
s98: *o3
istream_iterator<char> inpos(ifs); ,\.YJD>z
istream_iterator<char> endpos; QT7w::ht
ostream_iterator<char> out(oss); sV9{4T~#|
std::copy(inpos, endpos, out); 1C^HCIH7J
string& szData = oss.str(); jEC'l]l
TKj/6Jz|
const char * cc = szData.c_str(); ui s:\Uc
// cout << (long)szData << endl; },?-$eyX
// cout << (long)oss.str().c_str() << endl; 7H8GkuO
cout<< cc; 44Seq
P^'>dOI0w
return 0; 9+WY@du+
} `DU'wB
Bbn832iMUY
注意以上代码中红色部分没有写成: #o(?g-3
const char * cc = oss.str().c_str(); // error N[|by}@n
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 fJSV)\e0
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。