#include "stdafx.h" #- l1(m
B4hT(;k
#include <iostream> TqvgCk-
#include <fstream> 0|RFsJ"
#include <sstream> [&tN(K9*
#include <iterator> !\)9fOLs
using namespace std; 9Y6Ear .W
XLog+F$`
int main(int argc, char* argv[]) %^5|3l3y
{ ;;A8TcE
'
ifstream ifs("test.txt"); 4iXB`@k
if(!ifs) gc
ce]QS
return false; H=_ Wio
([mC!d@a
ostringstream oss; U{8]TEv
istream_iterator<char> inpos(ifs); %ut^ O
istream_iterator<char> endpos; 0q@U>#
ostream_iterator<char> out(oss); Z=L~W,0'
std::copy(inpos, endpos, out); ]TE,N$X
string& szData = oss.str(); qs["&\@
i9QL}d
const char * cc = szData.c_str(); 5Tl3k=o}
// cout << (long)szData << endl; P?.j
w I
// cout << (long)oss.str().c_str() << endl; lY.{v]i }
cout<< cc; (jV_L1D
"JH
/ODm
return 0; o
0-3[W'x<
} Cwb}$=p'
)kBN]>&R
注意以上代码中红色部分没有写成: i^i^g5l!
const char * cc = oss.str().c_str(); // error \-Oq/g{j
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 /3(|P
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。