#include "stdafx.h" :b
;5O3:B
yn=1b:kid
#include <iostream> LyQO_mT2
#include <fstream> 'DIE#l`
#include <sstream> 85X^T]zo
#include <iterator> 5 )C~L]
using namespace std; PzF)Vg
[Z[)hUXE?
int main(int argc, char* argv[]) nU`;MW/^w
{ >U}~Hv]
ifstream ifs("test.txt"); w68qyG|wM
if(!ifs) Tq?W @DM*
return false; q`\lvdl
o3`Z@-.G
ostringstream oss; q!7\`>.2:{
istream_iterator<char> inpos(ifs); ?/u&U\P
istream_iterator<char> endpos; xr=f9?%R
ostream_iterator<char> out(oss); . XY'l
std::copy(inpos, endpos, out); $)uQ%/DH>
string& szData = oss.str(); jrW7AT)\
jALo;PDJ
const char * cc = szData.c_str(); `q/y|/v<
// cout << (long)szData << endl; im?nR+t+X
// cout << (long)oss.str().c_str() << endl; g)"6|Z?D"
cout<< cc; oW8[2$_N+
D2hvf^g'*
return 0; M,[ClQ 9
} \2LCpN
1DBzD%@Oz
注意以上代码中红色部分没有写成: s}A]lY
const char * cc = oss.str().c_str(); // error ]~oM'?&!
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Rp|:$5&nE
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。