#include "stdafx.h" z0ufLxq
>ZPu$=[W
#include <iostream> [Nm?qY
#include <fstream> 4x+[?fw
#include <sstream> Q/Z>w+zh#
#include <iterator> Zi}h\R a
using namespace std; AtHkz|sl
R|qNyNXo[
int main(int argc, char* argv[]) z@19gD#8
{ 4|\M`T
ifstream ifs("test.txt"); u|$HA>F[
if(!ifs) A~E S{Zkh
return false; 8irTGA
f&5S`}C
ostringstream oss; I'{Ctc
istream_iterator<char> inpos(ifs); (HeSL),1
istream_iterator<char> endpos; Pr%KcR ;
ostream_iterator<char> out(oss); E,?IIRg&
std::copy(inpos, endpos, out); zpf<!x^
string& szData = oss.str(); Wy6a4oY
4`oKvL9
const char * cc = szData.c_str(); =(TMcu$4`
// cout << (long)szData << endl; ckP AH E@
// cout << (long)oss.str().c_str() << endl; @Q ~;@M
cout<< cc; yG~Vvpv
X[<#B5
return 0; J#@+1 Nt
} e&ZTRgYdi
a[zVC)N0
注意以上代码中红色部分没有写成: 525^/d6v
const char * cc = oss.str().c_str(); // error N|)e {|k
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 N&k\X]U
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。