#include "stdafx.h" .}==p&(
\jfK']P/H
#include <iostream> /U;j-m&
#include <fstream> ]az(w&vqg2
#include <sstream> {4J.
#include <iterator> U1 _"D+XB
using namespace std; VbX P7bZ
]Lv3XMa
int main(int argc, char* argv[]) )eZK/>L&
{ ocGrB)7eD
ifstream ifs("test.txt"); dl4n-*h
if(!ifs) DU^.5f
return false; u*C*O4f>OC
M7=,J;@
ostringstream oss; q5;dQ8Y?
istream_iterator<char> inpos(ifs); eHr0],
istream_iterator<char> endpos; b A+_/1C
ostream_iterator<char> out(oss); K(;qd Ir
std::copy(inpos, endpos, out); ]8A*uyi
string& szData = oss.str(); 4*X Nk;Dx
E'x"EN
const char * cc = szData.c_str(); M9iX_4
// cout << (long)szData << endl; #,#`<h!
// cout << (long)oss.str().c_str() << endl; SBxpJsW>
cout<< cc; #pvq9fss,}
[F6)Z[uG
return 0; 'K7\[if{
} En\@d@j<u
r=Xo; d*TE
注意以上代码中红色部分没有写成: ebBi zc=
const char * cc = oss.str().c_str(); // error r8 9o
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 <K CI@
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。