#include "stdafx.h"
?]d[K>bv
:=<0Z1S
#include <iostream> |<YoH$.
#include <fstream> &)8-iO
#include <sstream> nhUL{ER
#include <iterator> $oJ)W@>
using namespace std; <MPoDf?h
'+
8.nN
int main(int argc, char* argv[]) ]{[8$|Mg
{ S b9In_*
0
ifstream ifs("test.txt"); *@C4~Zo
if(!ifs) azUEp8`|
return false;
`#m>3
pO~VI$7
ostringstream oss; 8@S5P$b};
istream_iterator<char> inpos(ifs); fO4e[g;G
istream_iterator<char> endpos; K }]0<\N
ostream_iterator<char> out(oss); Mohy;#8Wk
std::copy(inpos, endpos, out); &.\|w
string& szData = oss.str(); e|L$e0
&I[ITp6y0
const char * cc = szData.c_str(); lO+<T[
// cout << (long)szData << endl; `mI%Se
// cout << (long)oss.str().c_str() << endl; is3nLm(
cout<< cc; Ozygr?*X
<z>K{:+>
return 0; ) OqQz7'
} S+i .@N.^
_t:l:x.;T
注意以上代码中红色部分没有写成: $ljgFmR_
const char * cc = oss.str().c_str(); // error r "^{?0
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 [":[\D'
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。