#include "stdafx.h" gf?N(,
.Z#/%y3S
#include <iostream> c&,q`_t
#include <fstream> JVxja<43
#include <sstream> O;i0xWUh
#include <iterator> W\j)Vg__e
using namespace std; D_1O4/
B?yjU[/R
int main(int argc, char* argv[]) <1B+@
{ y?P`vHf
ifstream ifs("test.txt"); pw5{=bD
if(!ifs) KV8<'g +2?
return false; Od^Sr4C
-Sn'${2
ostringstream oss; LAY:R{vI
istream_iterator<char> inpos(ifs); X;2LK!x;y
istream_iterator<char> endpos; m
OE!`fd
ostream_iterator<char> out(oss); FD&^nJ_{
std::copy(inpos, endpos, out); J#ClQ%
string& szData = oss.str(); qS"#jxc==+
]T)<@bmL
const char * cc = szData.c_str(); !d U$1:7
// cout << (long)szData << endl; t%J1(H
// cout << (long)oss.str().c_str() << endl; }}ic{931
cout<< cc; */_ 'pt
^\kH^
return 0; SH#*Lc
} -(>Ch>O
,,+4d :8$
注意以上代码中红色部分没有写成: 8ICV"8(
const char * cc = oss.str().c_str(); // error 6GPI
gPL,
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 wW/q#kc
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。