#include "stdafx.h" s-6$C
M`7lYw\Or!
#include <iostream> @ebY_*
#include <fstream> N\s-{7K
#include <sstream> k3LHLJZ#
#include <iterator> ^VzhjKSu
using namespace std; F +5
5p8
?pQ0*
O0
int main(int argc, char* argv[]) v#9i|
{ S^1ZsD.
ifstream ifs("test.txt"); Jl\U~i
if(!ifs) B{`K?e0
return false; B !x6N"
`}ZtK574
ostringstream oss; sOz
{spA
istream_iterator<char> inpos(ifs); "KCG']DF
istream_iterator<char> endpos; 3it*l-i\
ostream_iterator<char> out(oss); #3>jgluM'
std::copy(inpos, endpos, out); d8Cd4qIXX
string& szData = oss.str(); y]! #$C /
wKcuIc$
const char * cc = szData.c_str(); HOPl0fY$L
// cout << (long)szData << endl; LGtw4'yr
// cout << (long)oss.str().c_str() << endl; c8zok `\P_
cout<< cc; lwG)&qyVd
$qpW?<>,0
return 0; iu0'[
} ]T40VGJ:h
@}r
s6 G
注意以上代码中红色部分没有写成: $Ups9p Q
const char * cc = oss.str().c_str(); // error $PlMyLu7jc
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 %b h:c5
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。