#include "stdafx.h" k#bu#YZk
I|$
RJkD
#include <iostream> A~nf#(!^]
#include <fstream> ^7]"kg DA
#include <sstream> 7t9c7HLuj/
#include <iterator> hl&-\ dc+
using namespace std; #[MJ|^\i
7 1W5.!
int main(int argc, char* argv[]) ~8`:7m?
{ XS~- vF
ifstream ifs("test.txt"); -VDo[Zy
if(!ifs) nxQ?bk}*d
return false; ZWV|# c<G
mYB`)M*Y
ostringstream oss; :"0J=>PH:
istream_iterator<char> inpos(ifs); b{DiM098
istream_iterator<char> endpos; UkCnqNvx
ostream_iterator<char> out(oss); /\mKY%kyh
std::copy(inpos, endpos, out); zT~B6
string& szData = oss.str(); (wRBd
t<:D@J]a
const char * cc = szData.c_str(); #0b&^QL
// cout << (long)szData << endl; b4Y8N"hL%
// cout << (long)oss.str().c_str() << endl; pO<-.,
cout<< cc; 6) \dBOz
mxwdugr`
return 0; 2WM\elnA
} u!N{y,7W)
h06ku2Q
注意以上代码中红色部分没有写成: I>h<b_y
const char * cc = oss.str().c_str(); // error y?[snrK G
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 nD"~?*Lt
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。