#include "stdafx.h" =KD[#au6a
r&:yZN
#include <iostream> RQ#9[6w!v
#include <fstream> AP4s_X+=
#include <sstream> nvc(<Ovw
#include <iterator> d`j<Bbf-
using namespace std; |Vu`-L'Jz
_.EM])b
int main(int argc, char* argv[]) x8wsx
F
{ 8|+@A1)&4
ifstream ifs("test.txt"); [i>D|X
if(!ifs) J @IKXhb7_
return false; t~qAA\p}o
P86wRq
ostringstream oss; 3#\C!T0y
istream_iterator<char> inpos(ifs); 1:u~T@;" `
istream_iterator<char> endpos; A,7* 52U
ostream_iterator<char> out(oss); r CUs
std::copy(inpos, endpos, out); ;rnhv:Iw
string& szData = oss.str(); gzlRK^5
e. E$Ej]w
const char * cc = szData.c_str(); (S6>^:;=~
// cout << (long)szData << endl; CE|
*&G
// cout << (long)oss.str().c_str() << endl; Tq6\oIBkV
cout<< cc; )<e,- XujY
hxw6^EA
return 0; *w6F0>u
} q!Z{qt*`um
"=$uv
注意以上代码中红色部分没有写成: Zl.,pcL
const char * cc = oss.str().c_str(); // error ndk~(ex|j
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 5UG"i_TC
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。