#include "stdafx.h" A<SOT >m]
9q1HSJ1)
#include <iostream> xHJ8?bD p
#include <fstream> TCHqe19?
#include <sstream> f v E+.{
#include <iterator> rFmKmV
using namespace std; dG\U)WA(p
]<kupaRQ
int main(int argc, char* argv[]) S jVsF1d_
{ Jcz]J)|5v
ifstream ifs("test.txt"); id;#{O$
if(!ifs) b96t0w!cs
return false; 7uPZuXHxcu
NoCDY2 $
ostringstream oss; R9Sf!LR
istream_iterator<char> inpos(ifs); 5: daa
istream_iterator<char> endpos; YlswSQ
ostream_iterator<char> out(oss); )bLGEmm
std::copy(inpos, endpos, out); d>%gW*
string& szData = oss.str(); oX'0o 'c
;)(Sdf[P
const char * cc = szData.c_str(); e1
x^PT
// cout << (long)szData << endl; `^7:7Wr]=
// cout << (long)oss.str().c_str() << endl; 8 ]q
cout<< cc; CmEpir{}(
O^9CV*]!n
return 0; zL:&Q<
} jR{-
Rx6l|'e
注意以上代码中红色部分没有写成: TB7>s~)47E
const char * cc = oss.str().c_str(); // error %G;0T;0L
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 _wf5%(~b
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。