#include "stdafx.h" k?fz @H8D(
1K9.3n
#include <iostream> "B3jq^
#include <fstream> IS]A<}j/-
#include <sstream> tNY;wl:wp
#include <iterator> XY'=_5t
using namespace std;
fJ*^4
(9u`(|x
int main(int argc, char* argv[]) k{+cFG\C&
{ q9vND[BQ
ifstream ifs("test.txt"); ClKWf\(ii6
if(!ifs) Jq0sZ0j
return false; M+&~sX*a
RnH?95n?{
ostringstream oss; Xe);LhDC
istream_iterator<char> inpos(ifs); Y~}MfRE3z
istream_iterator<char> endpos; %r[`HF>
ostream_iterator<char> out(oss); O&7.Ry
m
std::copy(inpos, endpos, out); {"'M2w:|D1
string& szData = oss.str(); 4np2I~ !
) f~;P+
const char * cc = szData.c_str(); |.c4y*
// cout << (long)szData << endl; %NkiY iA
// cout << (long)oss.str().c_str() << endl; fS"u"]j*e
cout<< cc; Nw. )O
]0R*F30]
return 0; Y!M0JSaM
} %G!!0V!
*P' X[z
注意以上代码中红色部分没有写成: \aJ>?
const char * cc = oss.str().c_str(); // error k1z`92"
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 @K]`!=vUk
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。