#include "stdafx.h" eI$V2
! eZls
#include <iostream> u"qVT9C$=
#include <fstream> vT EqT
#include <sstream> s0' haU
#include <iterator> R)66qRf
using namespace std; @\&j3A
=T9h7c R
int main(int argc, char* argv[]) ?\8aT"o
{ c7r(&h
ifstream ifs("test.txt"); j_2g*lQ7a
if(!ifs) `*vO8v
return false; Ts
!g=F
XA!a^@<H
ostringstream oss; O(W"QY
istream_iterator<char> inpos(ifs); b5|*p(7[
istream_iterator<char> endpos; p*c(dkOe8
ostream_iterator<char> out(oss); "BSY1?k{
std::copy(inpos, endpos, out); +H3~Infr4f
string& szData = oss.str(); f`Fj-<v
et+lL"&
const char * cc = szData.c_str(); cIw X sx
// cout << (long)szData << endl; -]0:FKW
// cout << (long)oss.str().c_str() << endl; ,CyX*k8o
cout<< cc; U6/7EOW,
Nl YFS?5
return 0; 9Do75S{(
} (
3B1X
eWDXV-xD
注意以上代码中红色部分没有写成: 73X*|g[O
const char * cc = oss.str().c_str(); // error 29J|eBvxx
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 *Vl#]81~
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。