#include "stdafx.h" /cen#pb
M*6@1.n
#include <iostream> NP'DuzC
#include <fstream> 4"(zi5`e
#include <sstream> O Lup`~
#include <iterator> G( \1{"!
using namespace std; }~'Wz*Gm
v!h-h&p O7
int main(int argc, char* argv[]) y/6LMAI
{ |B$\3,
ifstream ifs("test.txt"); 4^ 6L ])y
if(!ifs) KmOa^vY1.T
return false; xLK0~|_#!
'R'a/ZR`B7
ostringstream oss; j4r,_lH^r
istream_iterator<char> inpos(ifs); -86:PL(I"
istream_iterator<char> endpos; FF!g9>
ostream_iterator<char> out(oss); $cU/Im`
std::copy(inpos, endpos, out); R,+(JgJ
string& szData = oss.str(); Byj~\QMD|
[]!r|R3
const char * cc = szData.c_str(); `#8R+c=$
// cout << (long)szData << endl; * .VZ(wX
// cout << (long)oss.str().c_str() << endl; 1+}Ud.v3VW
cout<< cc; V>92/w.fe
Fh$&puF2
return 0; 9?$!=4
} k+M-D~@5H
%<|KJb4?
注意以上代码中红色部分没有写成: m e{SVG{
const char * cc = oss.str().c_str(); // error HWOH8q{f!
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 K61os&K
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。