#include "stdafx.h" "=O)2}
=25"qJr
#include <iostream> )Qp?LECrt
#include <fstream> "[,XS`
#include <sstream> -JkO[IF
#include <iterator> 0}!lN{m?
using namespace std; *?\Nioii
T!r7RS
int main(int argc, char* argv[]) T9yW# .
{ F*u;'K
ifstream ifs("test.txt");
c7 -j
if(!ifs) |&.)_+w
return false; 5}VP-04vh
l"Q8`
ostringstream oss; $tJJ
>"
istream_iterator<char> inpos(ifs);
su$juI{
istream_iterator<char> endpos; Vy VC#AK,
ostream_iterator<char> out(oss); nz+KA\iW
std::copy(inpos, endpos, out); G@2M&0'
string& szData = oss.str(); BGS6uV4^>
L|Iq#QX|
const char * cc = szData.c_str(); J.(_c'
r
// cout << (long)szData << endl; W1z5|-T
// cout << (long)oss.str().c_str() << endl; ?*0kQo'
cout<< cc; Zx{'S3W
VdgPb (
return 0; ycN_<
} 1d6pQ9 N
<R$|J|
注意以上代码中红色部分没有写成: -mF9Skj
const char * cc = oss.str().c_str(); // error kp|reKM/
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 7Fx8&Z
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。