#include "stdafx.h" L|!9%X0.
{^MR^4&}(
#include <iostream> 89'nbg
#include <fstream> ~l{CUQU
#include <sstream> 47ir QK*
#include <iterator> +c\fDVv
using namespace std; )7c^@I;7
5-=mtvA:
int main(int argc, char* argv[]) ymr-kB
{ crZ\:LeJ
ifstream ifs("test.txt"); F
=d L#@^
if(!ifs) Tvf]OJ9N
return false; h+N75
TyGXDU
ostringstream oss; ^XZmtB
istream_iterator<char> inpos(ifs); hj0uv6t.c
istream_iterator<char> endpos; H^'*F->BA
ostream_iterator<char> out(oss); s-
g[B(
std::copy(inpos, endpos, out); )9L1WOGi
string& szData = oss.str(); 3&x_%R
pX6OhwkTK
const char * cc = szData.c_str(); Fv#ToT:QXe
// cout << (long)szData << endl; 9at7$Nq
// cout << (long)oss.str().c_str() << endl; ?z
Ms;
cout<< cc; qC`"<R=GX
?$=N!>P#
return 0; )oHIRsr
} $zxCv7
V`@@ufU}
注意以上代码中红色部分没有写成: .\*\bvyCw
const char * cc = oss.str().c_str(); // error nCXIWLw
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 >UR-37g{p
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。