#include "stdafx.h" 0GX10*t.
=v4r M0m,
#include <iostream> >$naTSJq
#include <fstream> VP%i1|XZJ
#include <sstream> %7 v@n+Q
#include <iterator> kg:
uGP9
using namespace std; Fu4EEi
5rml Aq
int main(int argc, char* argv[])
t'Eb#Nup3
{ S6T!qH{6
ifstream ifs("test.txt"); :Wg-@d
if(!ifs) (#bp`Kih
return false; 8VuZ,!WH#
l{6` k<J(
ostringstream oss; wY3|#P
CDV
istream_iterator<char> inpos(ifs); b-BM"~N'
istream_iterator<char> endpos; o)#q9Vk%b
ostream_iterator<char> out(oss); $xA J9_2P
std::copy(inpos, endpos, out); ~llMrl7
string& szData = oss.str(); ~|'y+h89
uKbHFF
const char * cc = szData.c_str(); Ln=>@
// cout << (long)szData << endl; NSS4vtA
// cout << (long)oss.str().c_str() << endl; PW*;S p
cout<< cc; VX;zZ`BJ
)
\-96 xd
return 0; cophAP
} HkdN=q
#7] o6
注意以上代码中红色部分没有写成: W(2+z5 z
const char * cc = oss.str().c_str(); // error qE0FgqRB
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 <mZrR3v'D
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。