#include "stdafx.h" xS/=9l/G
m,hqq%qz
#include <iostream> =;n>#<
#include <fstream> ^"4?Q
#include <sstream> HL[V}m
#include <iterator> S.iUiS"
using namespace std; SZ4y\I
<l,e6K
int main(int argc, char* argv[]) NR&a
er
{ tMU10=d
ifstream ifs("test.txt"); (/&ht-~EL
if(!ifs) @o@SU"[?_
return false; SK/}bZ;f
t3}_mJ
ostringstream oss; #,lbM%a
istream_iterator<char> inpos(ifs); \QSD*
istream_iterator<char> endpos; ~ cu+QR)
ostream_iterator<char> out(oss); c uAp,!
std::copy(inpos, endpos, out); K4Nz I9@
string& szData = oss.str(); J+0
?e9
M{u 7Ef
const char * cc = szData.c_str();
`m_fi
// cout << (long)szData << endl; S=<
]u
// cout << (long)oss.str().c_str() << endl; LfrjC@_y
cout<< cc; wU]8hkl?
p8F$vx4,
return 0; V^.Z&7+E`_
} LM"b%
j _E(h.
注意以上代码中红色部分没有写成: |C+
5
const char * cc = oss.str().c_str(); // error Z^mIGy}
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 uGlz|C
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。