#include "stdafx.h" *:>"q ej
ZN!4;
#include <iostream> 7h6,c /<
#include <fstream> VUVaaOmO
#include <sstream> Sl-v W
#include <iterator> Ul2R'"FB
using namespace std; ~vXaqCX
>y.%xK
int main(int argc, char* argv[]) &07]LF$]
{ ^&bRX4pYo
ifstream ifs("test.txt"); vr0WS3
if(!ifs) , #U.j
return false; @?=|Y
s:p[DEj-
ostringstream oss; /rq VB|M
istream_iterator<char> inpos(ifs); S|apw7C
istream_iterator<char> endpos; |~'IM3Jw(Y
ostream_iterator<char> out(oss); M@4UGM`J
std::copy(inpos, endpos, out); j'%$XvI
string& szData = oss.str(); z|asa*
t]$P 1*I
const char * cc = szData.c_str(); Eq$&qV-?(
// cout << (long)szData << endl; w4W_iaU
// cout << (long)oss.str().c_str() << endl; +<xQM h8
cout<< cc; }Z{=|rVE
Ggl~nxz
return 0; BZud)l24
} Y2d;E.DH8
8wVY0oRnU
注意以上代码中红色部分没有写成: uHAT#\m:
const char * cc = oss.str().c_str(); // error "*LD 3
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 bHg,1y)UC
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。