#include "stdafx.h" ~)S Q{eK?&
K|H&x"t
#include <iostream> -V'`;zE6
#include <fstream> yqg&dq
#include <sstream> u#+p6%?k
#include <iterator> $Qm-p?f
using namespace std; -zeodv7
j15TavjGh
int main(int argc, char* argv[]) ^UF]%qqOn
{ fs]9H K/@\
ifstream ifs("test.txt"); ,tEvz
if(!ifs) 8Ee bWs*1
return false; 6zQ {Y"0
A2`QlhZ
ostringstream oss; bb6
~H
istream_iterator<char> inpos(ifs); m_%1IJ
istream_iterator<char> endpos; n0X_m@
ostream_iterator<char> out(oss); s[yIvlHw`
std::copy(inpos, endpos, out); u@`)u#
string& szData = oss.str(); mGQgy[gX
N.J;/!%!
const char * cc = szData.c_str(); Tl#Jf3XY}
// cout << (long)szData << endl; XFeeNcqF
// cout << (long)oss.str().c_str() << endl; 2p( M`@
cout<< cc; '~-Lxvf'
-DO*,Eecv
return 0; w"CcWng1
} ~3{C&c
(%fl
注意以上代码中红色部分没有写成: CfMq?.4%E}
const char * cc = oss.str().c_str(); // error &FWPb#
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 _v=@MOI/J
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。