#include "stdafx.h" icX4n
&2U%/JqY
#include <iostream> AloL+eN@
#include <fstream> pF7N = mO
#include <sstream> <f`n[QD2z
#include <iterator> }#-@5["-X
using namespace std; `N&*+!O%
$2,tT;50g
int main(int argc, char* argv[]) LR{bNV[i
{ VdGVEDwz
ifstream ifs("test.txt"); mj&OZ+
if(!ifs) tGgDS)
return false; ; o
Y|~
|d&C<O;f
ostringstream oss; ,vO\n^
istream_iterator<char> inpos(ifs); 7#d:TXS
istream_iterator<char> endpos; wJ pb$;
ostream_iterator<char> out(oss); /a<UKh:A[
std::copy(inpos, endpos, out); U<Tv<7`
string& szData = oss.str(); [*Ai@:F
?AD-n6
const char * cc = szData.c_str(); 0j;ZPqEf3
// cout << (long)szData << endl; w/O'&],x
// cout << (long)oss.str().c_str() << endl; E
N%{ $
cout<< cc; ;Ce?f=4
e[?,'Mp9
return 0; h]L.6G|hEN
} ;ne`ppz0
SMIDW}U2S
注意以上代码中红色部分没有写成: <F(S_w62
const char * cc = oss.str().c_str(); // error [qW%H,_
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Ow*va\0
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。