#include "stdafx.h" u{lDof>
kKk |@
#include <iostream> /dvnQW4}8
#include <fstream> `R=_t]ie
#include <sstream> ~aq?Kk
#include <iterator> [F-u'h< *l
using namespace std; eRqexqO!
t:j07 ,1~
int main(int argc, char* argv[]) 6%hEs6-R
{ [,?A$Z*Z|
ifstream ifs("test.txt"); f+88R=-u6S
if(!ifs) .$s|T
return false; nF
y7gA|
xbH!:R;
ostringstream oss; $8 ww]}K
istream_iterator<char> inpos(ifs); A5H8+gATK
istream_iterator<char> endpos; k49n9EX
ostream_iterator<char> out(oss); xA1pDrfC/
std::copy(inpos, endpos, out); q}24U3ow
string& szData = oss.str(); -bb7Y
^A$XXH'
const char * cc = szData.c_str(); AeQ&V d|
// cout << (long)szData << endl; ,xM*hN3A
// cout << (long)oss.str().c_str() << endl; @KRn3$U
cout<< cc; p){RSq
?j$8Uy$$
return 0; ump:dL5{
} 8\t7}8f
M
#RuI%
注意以上代码中红色部分没有写成: ~9jP++&
const char * cc = oss.str().c_str(); // error R#^pNJN
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 73Zs/
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。