#include "stdafx.h" pr/yDGia
gyieS Xz[
#include <iostream> FgRlxz
#include <fstream> YmHn*N}:U
#include <sstream> L1.<LB^4'
#include <iterator> A7-QOqST(
using namespace std; !yH&l6s
ZSYXUFz
int main(int argc, char* argv[]) R|8)iW^
{ g!D?Yj4
ifstream ifs("test.txt"); 6+FmYp
if(!ifs) kwK<?\D
return false; A;w,m{9<
L]kSj$A
ostringstream oss; Revc
:m1o
istream_iterator<char> inpos(ifs); rayC1#f
istream_iterator<char> endpos;
Eti;(>"@
ostream_iterator<char> out(oss); _7]* 5Pxo
std::copy(inpos, endpos, out); .5|wy<
string& szData = oss.str(); (2QFwBW]
s{KwO+ UW
const char * cc = szData.c_str(); ^{-J Y
// cout << (long)szData << endl; e0+N1kY
// cout << (long)oss.str().c_str() << endl; \8=>l?P
cout<< cc; c&AA< 6pkv
=wPl;SDf!
return 0; : UD<1fh
} ?A2#V(4
QOEcp% 6I}
注意以上代码中红色部分没有写成: S*IF/ fu
const char * cc = oss.str().c_str(); // error 3F[z]B
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 lycY1 lK
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。