#include "stdafx.h" v*";A
|lCS^bA3
#include <iostream> Y5{KtW
#include <fstream> &x9>8~
#include <sstream> fV#,<JG
#include <iterator> DHq#beN
using namespace std; l*>,K2F
_jb'HP
int main(int argc, char* argv[])
?kIyo
{ "hmLe(jo}
ifstream ifs("test.txt"); Wu~cy}\
if(!ifs) K<rv|bJ
return false; 'Z*`~,Q
,xw1B-dx
ostringstream oss; Tbp;xv_qo
istream_iterator<char> inpos(ifs); v!`:{)2C
istream_iterator<char> endpos; &HQ_e$1
ostream_iterator<char> out(oss); $PstEL
std::copy(inpos, endpos, out); S,Z~-j
string& szData = oss.str(); Wsb>3J
25PZ&^G8%
const char * cc = szData.c_str(); J`]9n>G
// cout << (long)szData << endl; ;kI)j
?
// cout << (long)oss.str().c_str() << endl; 4Ei8G]O
$_
cout<< cc; [g bFs-B2/
Sa[?B
return 0; =X1oB,W{
} !,+<?o y
XJ!?>)N .
注意以上代码中红色部分没有写成: )1f%kp#]
const char * cc = oss.str().c_str(); // error ]]o?!NX
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 Kf-XL),3l
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。