#include "stdafx.h" rg^\BUa-W,
Qz) 8eIO:
#include <iostream> {2k<
k(,
#include <fstream> |C6(0fgWd
#include <sstream> [RFK-E
#include <iterator> ~wf~bzs
using namespace std; @GZa:(
60%~+oHi~
int main(int argc, char* argv[]) L+rySP
{ wu!_BCIy
ifstream ifs("test.txt"); :.[5('
if(!ifs) Gx_`|I{P
return false; 3b)T}g
s.`%ZDl@Y
ostringstream oss; ;=VK_3"
istream_iterator<char> inpos(ifs); 5;MK1l
istream_iterator<char> endpos; @52=3
ostream_iterator<char> out(oss); Be>c)90bO_
std::copy(inpos, endpos, out); mGpkM?Y"
string& szData = oss.str(); aQ&8fteFR
ok%a|Zz+]
const char * cc = szData.c_str(); 2@m(XT
(
// cout << (long)szData << endl; g1 Wtu*K3
// cout << (long)oss.str().c_str() << endl; `-K)K<
cout<< cc; :KV,:13`D
-=[o{r`
return 0; &>zy_)
} 9 CK\tx&
.)^3t~
注意以上代码中红色部分没有写成: o(X90X
const char * cc = oss.str().c_str(); // error Hu9-<upc&
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Z!RRe]"y
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。