#include "stdafx.h" I$G['`XX/
JPHL#sKyz
#include <iostream> +3BN}
#include <fstream> J*A,o~U|
#include <sstream> |YWD8 +
#include <iterator> C.-,^+t;g
using namespace std; [|$h*YK
VCkq"f7cw
int main(int argc, char* argv[]) n( yn<
{ Ll't>)
ifstream ifs("test.txt"); N>`Aw^ _@&
if(!ifs) +Kc
return false; vh%B[brUJ
nR~@#P\
ostringstream oss; T?0eVvM
istream_iterator<char> inpos(ifs); (5YM?QAd
istream_iterator<char> endpos; vA{-{Q
ostream_iterator<char> out(oss); (%6P0*
std::copy(inpos, endpos, out); Nai2W<,
string& szData = oss.str(); Sz`,X0a
t3_O H^
const char * cc = szData.c_str(); ;[DU%f
// cout << (long)szData << endl; zC!t;*8a
// cout << (long)oss.str().c_str() << endl; `U_)98
cout<< cc; 9cF[seE"0
8TKnL\aar
return 0; V}CG:9;
} cuITY^6
_TZRVa_
注意以上代码中红色部分没有写成: h438`
const char * cc = oss.str().c_str(); // error (?c"$|^J
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 FVKTbvYn
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。