#include "stdafx.h" 095ZZ20
q6
Rr?
#include <iostream> ZzV%+n7<Vx
#include <fstream> hiA%Tq?
#include <sstream> lip1wR7
#include <iterator> =WP`i29j9}
using namespace std; VWR6/,N^_
h$y0>eMWs
int main(int argc, char* argv[]) W"L;8u
{ 1K'.QRZMb9
ifstream ifs("test.txt"); #}{1>g{sXt
if(!ifs) ^qlfdf
return false; A#B6]j)
~%o?J"y
ostringstream oss; {:r8X
istream_iterator<char> inpos(ifs); h q&2o
istream_iterator<char> endpos; -P>f2It
ostream_iterator<char> out(oss); vg/:q>o
std::copy(inpos, endpos, out); AmmUoS\
string& szData = oss.str(); JQ.w6aE
O*7Gl G
const char * cc = szData.c_str(); L=wg"$
// cout << (long)szData << endl; ?u]%T]W
// cout << (long)oss.str().c_str() << endl; =9ISsI\Y6
cout<< cc; QjlwT 2o'
J3B]JttU
return 0; oAgO3x
} gqf*;Z eU
,TAzJ
注意以上代码中红色部分没有写成: Tv{X$`%
const char * cc = oss.str().c_str(); // error ]M;aVw<!
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 1Gojuey
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。