#include "stdafx.h" jJt4{c
NW3qs`$-(
#include <iostream> |/%5~=%7
#include <fstream> d&Nji%Ej
#include <sstream> i^A=nsD`
#include <iterator> P7bb2"_9
using namespace std; W$;qhB
|r)QkxdU,
int main(int argc, char* argv[]) V,'_BUl+x
{ _j0xL{&&
ifstream ifs("test.txt"); rbIYLVA+V
if(!ifs) afD {w*[8
return false; p>3QW3<
a;-%C{S9r
ostringstream oss; I\c7V~^hnG
istream_iterator<char> inpos(ifs); ONy\/lu|
istream_iterator<char> endpos; E.ji;5
ostream_iterator<char> out(oss); &N6[*7
std::copy(inpos, endpos, out); :Mh\;e
string& szData = oss.str(); *o:J 4'
`VUJW]wGu
const char * cc = szData.c_str(); JhTr{8{
// cout << (long)szData << endl; |_7k*:#q:
// cout << (long)oss.str().c_str() << endl; .7 LQ l?
cout<< cc; d]^m^
_~C1M&b(X3
return 0; *!*%~h8V
} y&O?`"Uv/M
G{>PYLxOb
注意以上代码中红色部分没有写成: e"bzZ!c&~V
const char * cc = oss.str().c_str(); // error L$s ENOm
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 J=: \b
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。