#include "stdafx.h" m IzBK]@^
|)qK
g
#include <iostream> kP)o=\|W{z
#include <fstream> ~RXpz-Ye
#include <sstream> 'Y[A'.*}4
#include <iterator> p??/r
using namespace std; B/=q_.1F>
:Nz?<3R0\
int main(int argc, char* argv[]) <}
y p
{ +^kxFQ(:
ifstream ifs("test.txt"); ,%h!% nz!
if(!ifs) O4/n!HOb
return false; &ZE\@Vc
;x-H$OZX
ostringstream oss; (b%y$D
istream_iterator<char> inpos(ifs); S7kT3zB
istream_iterator<char> endpos; 9"aFS=><
ostream_iterator<char> out(oss); b#g
{`E
std::copy(inpos, endpos, out); z@~&Kwf\}
string& szData = oss.str(); >C3NtGvy
atf%7}2
const char * cc = szData.c_str(); WkaR{{nM
// cout << (long)szData << endl; }6J7<g
// cout << (long)oss.str().c_str() << endl; <s8?
Z1
cout<< cc; v'Vt
.m&9&
#\;>8
return 0; 9>Uq$B
} ^ L^F=q x
Ao":9r[V
注意以上代码中红色部分没有写成: Blbq3y+Sq
const char * cc = oss.str().c_str(); // error ]1?=jlUl
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 M{xVkXc>
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。