#include "stdafx.h" XX5(/#
3=L1H ZH
#include <iostream> K&P{2Hndr
#include <fstream> s:Ql](/B#
#include <sstream> O@(.ei*HJ!
#include <iterator> nKa;FaJ
using namespace std; eiSO7cGy
Ckl]fy@D}
int main(int argc, char* argv[]) g:e8i~
{ y7G|P~td
ifstream ifs("test.txt"); YU \t+/b
if(!ifs) uKAHJ$%
return false; ve]95w9J
"BNmpP
ostringstream oss; xXh]z|
istream_iterator<char> inpos(ifs); 3z. >b
istream_iterator<char> endpos; B>nd9Z '
ostream_iterator<char> out(oss); cXEy>U|/
std::copy(inpos, endpos, out); =Q0)t_z_
string& szData = oss.str(); ,`2xfVa-
^@w1Z{:
const char * cc = szData.c_str(); V@xnz)^t
// cout << (long)szData << endl; /<Nt$n
// cout << (long)oss.str().c_str() << endl; >v4~:n2D
cout<< cc; 7Sv5fLu2
D)eKq!_
return 0; !-o||rt
} dz.MH
#^[N4uV
注意以上代码中红色部分没有写成: (Jr;:[4XC
const char * cc = oss.str().c_str(); // error ]vyF&`phb
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 rG%_O$_dO
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。