#include "stdafx.h" ],wzZhA
<q|eG\01S
#include <iostream> "||G`%aO+t
#include <fstream> Z3iX^
#include <sstream> [U{RDX
#include <iterator> 'b_SQ2+A
using namespace std; *Oy%($'
A^F0}MYT
int main(int argc, char* argv[]) +jp^
{ ur
k@v
ifstream ifs("test.txt"); ` $[`C/h
if(!ifs) [+:KIW<
return false; r\|"j8
XP65
ostringstream oss; ";59,\6
istream_iterator<char> inpos(ifs); u?8e>a
istream_iterator<char> endpos; puGy`9eKv1
ostream_iterator<char> out(oss); G""=`@
std::copy(inpos, endpos, out); iEMIzaR
string& szData = oss.str(); 'RCX6TKBnR
3[To"You
const char * cc = szData.c_str(); KYFkO~N
// cout << (long)szData << endl; ~I%JVX%
// cout << (long)oss.str().c_str() << endl; P"c7h7
cout<< cc; JI92Dc*o
McU]U9:z
return 0; 8V:yOq10
} 0y#TGM|0D
f=40_5a6
注意以上代码中红色部分没有写成: 1;+(HB
const char * cc = oss.str().c_str(); // error f/=H#'+8
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 N)$yBzN
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。