#include "stdafx.h" r5$!41
=n@\m<
#include <iostream> W,!7_nl"u
#include <fstream> i!(5y>I_
#include <sstream> x~D8XN{
#include <iterator> 2<'ol65/c
using namespace std; 28-z
I,]q;lEMt
int main(int argc, char* argv[]) :RBeq,QaO
{ >Af0S;S
ifstream ifs("test.txt"); Z;0<k;#T(p
if(!ifs) Z\n^m^Z
=
return false; <1_3`t
|;p.!FO
ostringstream oss; iVmy|ewd
istream_iterator<char> inpos(ifs); 8R(l~
istream_iterator<char> endpos; i;IhsKO0R
ostream_iterator<char> out(oss); Nm%#rZrN~Q
std::copy(inpos, endpos, out); 66_=bd(9
string& szData = oss.str(); |X6R2I
y Tk1
const char * cc = szData.c_str(); [W3sveqj&
// cout << (long)szData << endl; G"6XJYoI
// cout << (long)oss.str().c_str() << endl; Vk[M .=J
cout<< cc; `v2Xp3o4f
qIh9? |`U
return 0; `ah"Q;d$
} N6%L4v8-}X
Q;nC #cg
注意以上代码中红色部分没有写成: 5HY0 *\
const char * cc = oss.str().c_str(); // error g-m,n=qu
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 0]nveC$
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。