#include "stdafx.h" x3jjtjf
cn9=wm\\
#include <iostream> E6- ~
#include <fstream> &G3$q,`H
#include <sstream> }UG<_bE|
#include <iterator> (YYwn@NGj
using namespace std; W)Yo-%
;b_<5S
int main(int argc, char* argv[]) vgr5j
{ \,I{*!hw
ifstream ifs("test.txt"); a3He-76
if(!ifs) Q"oJhxS
return false; %r:4'$E7|
KkR.p,/
ostringstream oss; Lk-h AN{[
istream_iterator<char> inpos(ifs); ;N
_%O
istream_iterator<char> endpos; 9HlM0qE5b
ostream_iterator<char> out(oss); M IU B]
std::copy(inpos, endpos, out); ;;EFiaA
string& szData = oss.str(); owO&[D/
%XXjQ5p
const char * cc = szData.c_str(); v6T<K)S
// cout << (long)szData << endl; gf8~Zlq4v
// cout << (long)oss.str().c_str() << endl; mDWRYIuN
cout<< cc; Y@b|/+
`0R>r7f)H
return 0; b1Ba}
} f>? b2a2HX
` ^z
l =
注意以上代码中红色部分没有写成: of`WP
const char * cc = oss.str().c_str(); // error
3BB/u%N}
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 yv> 6u7
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。