#include "stdafx.h" TYS\95<
A=3HO\n5
#include <iostream> M=!i>(yG
#include <fstream> T{MC-j _T9
#include <sstream> 3P=w =~e
#include <iterator> jp<VK<s]
using namespace std; B!,yfTk]
D&{
*AH%Q
int main(int argc, char* argv[]) b](o]O{v
{ D!FaE N
ifstream ifs("test.txt"); ,"
R>}kPli
if(!ifs) Df=q-iq<{/
return false; TQ9'76INb
1p\Ak
ostringstream oss; qc8Ta"
istream_iterator<char> inpos(ifs); Vu]h4S :
istream_iterator<char> endpos; SE `l(-tL
ostream_iterator<char> out(oss); (O5)wej
std::copy(inpos, endpos, out); E20&hc5 8
string& szData = oss.str(); ia{kab|_5
T!^Mvat
const char * cc = szData.c_str(); }=GM?,7b
// cout << (long)szData << endl; &TT":FPR
// cout << (long)oss.str().c_str() << endl; V/y=6wUiSl
cout<< cc; 1kFjas`g
YdOUv|tZC
return 0; jMU9{Si
} }B)jq`a?|\
it}-^3AM
注意以上代码中红色部分没有写成: LpWI>sNv
const char * cc = oss.str().c_str(); // error 9N
Le&o
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 l]5%
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。