#include "stdafx.h" =w5w=qB
X[[=YCi0
#include <iostream> `jkn*:m
#include <fstream> J{ Vl2P?@
#include <sstream> DQ}]'*@?
#include <iterator> -|kDa1knA
using namespace std; J.d `tiN
6bn-NY:i
int main(int argc, char* argv[]) >j?uI6Uw
{ 3^a"$VW1
ifstream ifs("test.txt"); &Hqu`A/^
if(!ifs) WveFB%@`;
return false; V]2z5u_q
g/J!U8W"
ostringstream oss; `xr%LsNn
istream_iterator<char> inpos(ifs); k|D!0^HE[
istream_iterator<char> endpos; (!(bysi9
ostream_iterator<char> out(oss); !|/fVWH
std::copy(inpos, endpos, out); one>vi`=
string& szData = oss.str(); GSH{1VS_b
1DP)6{x
const char * cc = szData.c_str(); ik*_,51Zj
// cout << (long)szData << endl; YB|9k)Z2[
// cout << (long)oss.str().c_str() << endl; ihVQ,Cth
cout<< cc; '3Ie0QO]"%
DvCt^O*
return 0; 96avgyc
} qg/5m;U
h(-&.Sm")H
注意以上代码中红色部分没有写成: A@OV!DJe]
const char * cc = oss.str().c_str(); // error I1~g?jpH
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 as4NvZ@+r
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。