#include "stdafx.h" wkT;a&_
&G{2s J5{
#include <iostream> J~J@ ]5/
#include <fstream> Y$8; Gm<)
#include <sstream> oa0X5}D
#include <iterator> 9y+[o
using namespace std; Zd<[=%d
{% F`%_{"
int main(int argc, char* argv[]) '0Zm#g
{ a>b8-j=J
ifstream ifs("test.txt"); w`#fH
if(!ifs) {,f[r*{Y
return false; ^g]xU1] *
qz:]-A
ostringstream oss; *]!l%Uf%
istream_iterator<char> inpos(ifs); #{>uC&jD
istream_iterator<char> endpos; jaqV[*440U
ostream_iterator<char> out(oss); ;f(n.i
std::copy(inpos, endpos, out); ('BLU.7IX
string& szData = oss.str(); `cO|RhD@
K`gc 4:A
const char * cc = szData.c_str();
Ars,V3ep
// cout << (long)szData << endl; Vi,Y@+4
// cout << (long)oss.str().c_str() << endl; ;.0LRWcJ
cout<< cc; ;Id"n7W
;@!;1KDy
return 0; Gt'/D>FE0
} QRagz,c
".M:`BoW4
注意以上代码中红色部分没有写成: ! OfO:L7-
const char * cc = oss.str().c_str(); // error <{ #<5 8
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 gUb
"3g0
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。