#include "stdafx.h" c$E)P$<j
CX/(o]
#include <iostream> pR os{Uq"
#include <fstream> H:&?ha,9
#include <sstream> | FM
}
#include <iterator> 4)-)# `K
using namespace std; P~C rtTss
TvhJVVQ+?
int main(int argc, char* argv[]) &vUq}r%P
{ $ACx*e%
ifstream ifs("test.txt"); x!TZ0fq0
if(!ifs) oh8L`=>&a
return false; T3J'fjY
@|-OJ4[5
ostringstream oss; 5fjd{Y[k
istream_iterator<char> inpos(ifs); f_mhD dq
istream_iterator<char> endpos; *MM#Z?mP
ostream_iterator<char> out(oss); ZXiRw)rM
std::copy(inpos, endpos, out); T.&7sbE_
string& szData = oss.str(); D9ufoa&ua
!AHAS
const char * cc = szData.c_str(); t1]6(@mj5
// cout << (long)szData << endl; +a)E|(cN
// cout << (long)oss.str().c_str() << endl; mB 55PYA
cout<< cc; AHh#Fx+K
rj]
E@W
return 0; cgZaPw2
bw
} !XE aF]8
7qIB7 _K5
注意以上代码中红色部分没有写成: }6m?d!m
const char * cc = oss.str().c_str(); // error t%0?N<9YkU
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 x1[?5n6
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。