#include "stdafx.h" 2&c9q5.b
Ofm%:}LV
#include <iostream> KDl_?9E5
#include <fstream> 0;4t&v7
#include <sstream> Uw,2}yR
#include <iterator> a22Mufl
using namespace std; dVB~Smsr
kg@>;(V&
int main(int argc, char* argv[]) jdE5~a+
{ Hqnxq
ifstream ifs("test.txt"); ?Kvl!F!`
if(!ifs) >.dWjb6t
return false; dl hdsj:
Dfq(Iv
ostringstream oss; J|'7_0OAx
istream_iterator<char> inpos(ifs); "\0v,!@
istream_iterator<char> endpos; ynA|}X
ostream_iterator<char> out(oss); gTA%uRBa
std::copy(inpos, endpos, out); CR6R?R3b
string& szData = oss.str(); u,}{I}x_
Us+pc^A
const char * cc = szData.c_str(); J'N!Omz
// cout << (long)szData << endl; sdQkT# %y
// cout << (long)oss.str().c_str() << endl; ]4;PR("aU
cout<< cc; }$bF
5&
<dW]\h?)
return 0; %W@v2
} }Tf9S<xpq3
p~*UpU8u
注意以上代码中红色部分没有写成: 71vkyn@"
const char * cc = oss.str().c_str(); // error -V: "l
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 2tal
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。