#include "stdafx.h"
}_mVXjF
PaD6||1F
#include <iostream> (fA>@5n
#include <fstream> /aTW X
#include <sstream> {{6D4M|s
#include <iterator> X8 $Y2?<
using namespace std; +P! ibHfP
MpK3+4UMa
int main(int argc, char* argv[]) =y^`yv 3
{ \qf0=CPw8
ifstream ifs("test.txt"); kz_gR;"(Z
if(!ifs) O:E0htdWr
return false; ZWmS6?L.
d4~;!#<
ostringstream oss; - f?8O6e
istream_iterator<char> inpos(ifs); XQ3"+M_KG
istream_iterator<char> endpos; \+)aYP2Hu
ostream_iterator<char> out(oss); "_^vQ1M]Z
std::copy(inpos, endpos, out); _^/k
string& szData = oss.str(); whi#\>i
*O|_)G
const char * cc = szData.c_str(); %<)!]8}P*
// cout << (long)szData << endl; tgyW:<iv
// cout << (long)oss.str().c_str() << endl; fZ aTckbE
cout<< cc; _lG|t6y
Y1Q240
return 0; k=W~ot&
} 8$F"!dc _
I1pnF61U
注意以上代码中红色部分没有写成: w!dgIS$
const char * cc = oss.str().c_str(); // error d88Dyzz
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 4aP 96
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。