#include "stdafx.h" q-+_Y `_\
BGO
pUy
#include <iostream> H"pwIiC
#include <fstream> 07,&weQ
#include <sstream> TSRl@QVy
#include <iterator> &w^:nVgl
using namespace std; d}^hZ8k|
0 \o5+
int main(int argc, char* argv[]) lBG"COu
{ (Ii+}Mfp
ifstream ifs("test.txt"); z{U^j:A
if(!ifs) *!}bU`
return false; 94[8~_{fG
[Lid%2O3ZR
ostringstream oss; 0T:U(5Y9
istream_iterator<char> inpos(ifs); ]_! .xx>
istream_iterator<char> endpos; )=#zMdK&
ostream_iterator<char> out(oss); $
3.Y2&$T
std::copy(inpos, endpos, out); ^^[A\'
string& szData = oss.str(); 9H
cxL
W;P8'_2Y
const char * cc = szData.c_str(); fvV5G,lD3h
// cout << (long)szData << endl; U~8, N[
// cout << (long)oss.str().c_str() << endl; >\s+A2P
cout<< cc; $< .wQ8:Q
edfb7prfTl
return 0; /+?eSgM/
} R9~c: A4G
+!-U+W
注意以上代码中红色部分没有写成: (U|WP%IM'
const char * cc = oss.str().c_str(); // error Lr(My3vF8q
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 e,@5`aYHM@
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。