#include "stdafx.h" );*A$C9RA
:bxq%D%|o
#include <iostream> Y!C=0&p
#include <fstream> Cebl"3Q
#include <sstream> -t, .A/?
#include <iterator> "Ldi<xq%xl
using namespace std; Jb'M/iG
`CP}1W>
int main(int argc, char* argv[]) z}vgp\cuT
{ CY&Z*JI"'B
ifstream ifs("test.txt"); P%8zxU;
if(!ifs) %,-oxeM1u
return false; ^w eU\
@tvAI2W
ostringstream oss; iEG`+h'
istream_iterator<char> inpos(ifs); fdIk{o
istream_iterator<char> endpos; A`|OPi)
ostream_iterator<char> out(oss); ,4hQ#x
std::copy(inpos, endpos, out); ^[{\ZX
string& szData = oss.str(); m"P"iK/Av(
;Jex#+H(:D
const char * cc = szData.c_str(); V&x6ru#
// cout << (long)szData << endl; Tti]H9g_
// cout << (long)oss.str().c_str() << endl; N'nI
^=
cout<< cc; ]Ma2*E!p
$*ujX,}xG
return 0; zT[[WY4
} ] 8sVXZ
K8{U b
注意以上代码中红色部分没有写成: F2yc&mXyk
const char * cc = oss.str().c_str(); // error |kL^k{=zV
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 sGjYL>*
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。