#include "stdafx.h" <.`i,|?MHS
**P P
#include <iostream> E+y_te^+b
#include <fstream> p;4FZ$
#include <sstream> |X{j^JP5
#include <iterator> C.4(8~Y=~
using namespace std; 6$#,$a O
Kmx4bp4
int main(int argc, char* argv[]) 5kqI
{ Gd!_9S`68
ifstream ifs("test.txt"); km>ZhsqD
if(!ifs) /Ey%aA4v
return false; =U84*HAv
$`OyGeq"T
ostringstream oss; d/GSG%zB
istream_iterator<char> inpos(ifs); tnpEfi-
istream_iterator<char> endpos; IV~)BW leT
ostream_iterator<char> out(oss); C32*RNG?U
std::copy(inpos, endpos, out); f)vnm*&-
string& szData = oss.str(); sssw(F
pI f6RwH}%
const char * cc = szData.c_str(); T Tbe{nb
// cout << (long)szData << endl;
@Mg&T$
// cout << (long)oss.str().c_str() << endl; ](I||JJa9f
cout<< cc; G{?`4=K
0%xb):Ctw
return 0; ")ys!V9
} "3_X$`v"!
t=lDN'\P
注意以上代码中红色部分没有写成: 86LE
)z
const char * cc = oss.str().c_str(); // error 5XT^K)'
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 O<fy^[r:`
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。