#include "stdafx.h" A[;deHg=
3[fm|aU
#include <iostream> mXyP;k
#include <fstream> 1;=L]
L?
#include <sstream> =+j3E<w
#include <iterator> /ie&uWy
using namespace std; $]E+E.P
k"i3$^v8
int main(int argc, char* argv[]) !mUJ["#
{ fIQ,}>
ifstream ifs("test.txt"); xE?KJ
if(!ifs) gUx}vE-
return false; VM\R-[
d%'#-w'
ostringstream oss; #4$YQ
istream_iterator<char> inpos(ifs); BkXv4|UE
istream_iterator<char> endpos; /y-D_
ostream_iterator<char> out(oss); Zc~7R`v7}
std::copy(inpos, endpos, out); WC~;t4
string& szData = oss.str(); LsERcjwwK
S^pb9~
const char * cc = szData.c_str(); mv8H:T
// cout << (long)szData << endl; C
6
\
// cout << (long)oss.str().c_str() << endl; xc}[q`vK
cout<< cc; 'D5J5+.z
$"/l*H\h
return 0; X|hYZR
} rueaP
'xqyG XI
注意以上代码中红色部分没有写成: x7zc3%T's
const char * cc = oss.str().c_str(); // error h76j|1gI
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Cb{D[
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。