#include "stdafx.h" GA)t!Xg^
l:VcV
#include <iostream> g"v-hTx
#include <fstream> 3hzKd_
#include <sstream> K<w$
#include <iterator> U{.y X7
using namespace std; &Sp2['a!
}W* q
int main(int argc, char* argv[]) M,9f}V)
{ *1b)Va8v*
ifstream ifs("test.txt"); m:{IVvN_
if(!ifs) h-:te9p6>4
return false; &Ukh
_"c?[n
ostringstream oss; PeB7Q=d)K1
istream_iterator<char> inpos(ifs); Zut"P3d=J
istream_iterator<char> endpos;
U>
1v oc
ostream_iterator<char> out(oss); @ * *]o
std::copy(inpos, endpos, out); B"I^hrQ
string& szData = oss.str(); QPpC_pZh
`GT{=XJfY
const char * cc = szData.c_str(); 4Q(GX.5
// cout << (long)szData << endl; ;bt%TxuKb
// cout << (long)oss.str().c_str() << endl; 0)-yLfTn
cout<< cc; r5\|%5=J
s(Llz]E~ZX
return 0; io(Rb\#"
} /aD3E"Op
9TbRrS09
注意以上代码中红色部分没有写成: *5|q_K
Pt
const char * cc = oss.str().c_str(); // error <%]i7&8|
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 jAb R[QR1%
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。