#include "stdafx.h" lUHtjr
j;iL&eo>
#include <iostream>
4{Udz!
#include <fstream> 9 #Y2`pT
#include <sstream> ;g9% &
#include <iterator> E?Cj/o
using namespace std; n+?-
:_Fxy5}
int main(int argc, char* argv[]) #W|!fILL
{ IBET'!j4"
ifstream ifs("test.txt"); ufPCx|x~
if(!ifs) >)^NJ2Fd
return false; <Y>3
,eXFN?CB
ostringstream oss; (@q3^)I4
istream_iterator<char> inpos(ifs); 1~@|eWr|
istream_iterator<char> endpos; )~}PgbZ^
ostream_iterator<char> out(oss); +9zA^0
std::copy(inpos, endpos, out); nLJBq)i
string& szData = oss.str(); ~C|,b"
p+[}Hxx=
const char * cc = szData.c_str(); u s`}
// cout << (long)szData << endl; @6b[GekZ<
// cout << (long)oss.str().c_str() << endl; Q>=-ext}q
cout<< cc; cy3M^_5B<
fK_~lGY(
return 0; ;Iq5|rzDn
} 6m+W#]^
[))JX"a
注意以上代码中红色部分没有写成: lR@& Z6lw
const char * cc = oss.str().c_str(); // error W2 <3C
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 K/|
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。