#include "stdafx.h" ^O+ (eA7E
]nB|8k=J
#include <iostream> 8vR_WHsL
#include <fstream> ]'(D*4
#include <sstream> n:`f.jG |
#include <iterator> [C0v-
using namespace std; 7LVG0A2>7
\z0HHCn'"
int main(int argc, char* argv[]) 9K`_P] l2z
{ 0Z6geBMc
ifstream ifs("test.txt"); I@9'd$YY
if(!ifs) Is7BJf
return false; w90YlWS#
J>}J~[ap\J
ostringstream oss; \/Mx|7<
istream_iterator<char> inpos(ifs); ,oA<xP-*
istream_iterator<char> endpos; esnq/
ostream_iterator<char> out(oss); 6ABK)m-y
std::copy(inpos, endpos, out); :+PE1=v
string& szData = oss.str(); l^Rb%?4Z
LQ# E+id&
const char * cc = szData.c_str();
pzz*>Y
// cout << (long)szData << endl; 87 s *lS
// cout << (long)oss.str().c_str() << endl; gk%@& TB/
cout<< cc; rYr*D[m]
|M?vFF]TN
return 0; b[<RcM{r}
} ~.%HZzR6&
<ErX<(0`ig
注意以上代码中红色部分没有写成: )|lxzlk
const char * cc = oss.str().c_str(); // error pqfX}x
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 [^5;XD:%&l
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。