#include "stdafx.h" ^pAgo B
} v#Tm
#include <iostream> La$*)qD,
#include <fstream> :C%cnU;N
#include <sstream> 8KQD
w:
#include <iterator> $@H]0<3,
using namespace std; Qw&It
?Q`u\G3.m
int main(int argc, char* argv[]) u$A*Vsmr
{ |&O7F;/_
ifstream ifs("test.txt"); *|Cmm>z"7
if(!ifs) :?LUv:G
return false; Ne6]?\Z
!1g2'
ostringstream oss; <,r(^Ntz
istream_iterator<char> inpos(ifs); G}MJWf Hl
istream_iterator<char> endpos; l$j/Ye]
ostream_iterator<char> out(oss); f$\gm+&hXE
std::copy(inpos, endpos, out); qXI>x6?*
string& szData = oss.str(); JqX+vRY;dd
XeGtge/}T
const char * cc = szData.c_str(); })zYo 7
// cout << (long)szData << endl; lwY2zX&%)/
// cout << (long)oss.str().c_str() << endl; bf9LR1
cout<< cc; "mBX$t'gb
a@>P?N~LA9
return 0; -F&4<\=+
} 1 uKWvp0\
'?WKKYD7N
注意以上代码中红色部分没有写成: jHP6d =
const char * cc = oss.str().c_str(); // error +7HM7cw
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 +W{ELdup%q
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。