#include "stdafx.h" Qd$!?h
y~pJ|E
#include <iostream> e6WKZ~
vo
#include <fstream>
6v}WdK
#include <sstream> . ;q4<_
#include <iterator> :]oR x
using namespace std; A1(=7ZKz
2u|}gZts
int main(int argc, char* argv[]) GwaU7[6
{ G'
'l,\3
ifstream ifs("test.txt"); h_:|H8t;w
if(!ifs) 1V37%
D
return false; &r
Lg/UEV-
$zuemjW3p
ostringstream oss; _P*<T6\J>
istream_iterator<char> inpos(ifs); GP\Pk/E
istream_iterator<char> endpos; uM<6][^`
ostream_iterator<char> out(oss); #D&]5"0cX
std::copy(inpos, endpos, out); D#n^U
`\if
string& szData = oss.str(); 1Q ^YaHzuW
yPqZ ,
const char * cc = szData.c_str(); aj<=]=hr
// cout << (long)szData << endl; NuqWezJm&
// cout << (long)oss.str().c_str() << endl; ` 'y[i
cout<< cc; ;/8oP ;X2
$}G03G@
return 0; 1k}U+
} HrZ\=1RB
@fWmz,Ngl
注意以上代码中红色部分没有写成: UR&Uwa&.
const char * cc = oss.str().c_str(); // error c~+;P(>
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 U,4:yc,)s
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。