#include "stdafx.h" 5V!L~#
&F1h3q)L
#include <iostream> l~!Tnp\M
#include <fstream> "%dWBvuO
#include <sstream> VQ5T$,&
#include <iterator> WCA`34(
using namespace std; 5Al59]
UeV2`zIg`
int main(int argc, char* argv[]) ^crk8O@Fw
{ 9a 9<I
ifstream ifs("test.txt"); ?vPw I
if(!ifs) ;ZPAnd:pb
return false; b)9bYkd
x^^;/%p
ostringstream oss; 5<w"iqZ\?N
istream_iterator<char> inpos(ifs); Rcs7 'q5
istream_iterator<char> endpos; y?GRxoCD"e
ostream_iterator<char> out(oss); Yxz(g]
std::copy(inpos, endpos, out); ]Cnj=\'
string& szData = oss.str(); nF0$
!31v@v:)
const char * cc = szData.c_str(); 7\@[e, ^9
// cout << (long)szData << endl; v/=O:SM}
// cout << (long)oss.str().c_str() << endl; _?#}@?
cout<< cc; oRFHq>-.g
rD<G_%hP
return 0; 3ddH@Y|
} Ug*:o d
^]o]'
注意以上代码中红色部分没有写成: %myg67u
const char * cc = oss.str().c_str(); // error z1wy@1o'
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 =Y#)c]`
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。