#include "stdafx.h" q/U-WQ<+
6v@Prw@.b
#include <iostream> ? Fqh
i
#include <fstream> Owp]>e
#include <sstream> f,YORJ
#include <iterator> v]JET9hY
using namespace std; <5Vf3KoC&
BKFO^
int main(int argc, char* argv[]) #v
c+;`X
{ ,Wtw0)4
ifstream ifs("test.txt"); cMK|t;"
3
if(!ifs) ueg%yvO
return false; ^C gg1e1
|:)Bo<8
ostringstream oss; W83d$4\d
istream_iterator<char> inpos(ifs); 3qV^RW&
istream_iterator<char> endpos; p{?duq=
ostream_iterator<char> out(oss); fb
f&bJT
std::copy(inpos, endpos, out); <?7CwW
string& szData = oss.str(); Z@Rqm:e
/X8a3Eqp9
const char * cc = szData.c_str(); /.:1Da
// cout << (long)szData << endl; [_N1
.}e
// cout << (long)oss.str().c_str() << endl; LM<*VhX
cout<< cc; AA-$;s
$$AZ)#t[
return 0; fWP]{z`
} cfmwz~S6i
h(WlJCln
注意以上代码中红色部分没有写成: <n_?$ TJ
const char * cc = oss.str().c_str(); // error a-*sm~u
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 su0K#*P&I
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。