#include "stdafx.h" LVc4CE
f
i:rFQ8I
#include <iostream> F.-R r
#include <fstream> lE!a
#include <sstream> \\{J'j>{f
#include <iterator> @+'-ADX
using namespace std; zrR`ecC(b
w^L ta
int main(int argc, char* argv[]) gzBy?r> r
{ uHH/rMV
ifstream ifs("test.txt"); u$*56y
if(!ifs) A,V\"KU
return false; BYO"u6
TpmwD{c[\
ostringstream oss; $={:r/R`i
istream_iterator<char> inpos(ifs); T21ky>8E
istream_iterator<char> endpos; +E1I");
ostream_iterator<char> out(oss); JT "B>y>
std::copy(inpos, endpos, out); Dq36p${\W
string& szData = oss.str(); P&j(,7
)+6v
const char * cc = szData.c_str(); psnTFe
// cout << (long)szData << endl; Dfps
gY)/?
// cout << (long)oss.str().c_str() << endl; YY&l?*M<
cout<< cc; S-7'it!1
D\@m6=L
return 0; h Ggx
} 0dA7pY9
Pt@%4 :&-h
注意以上代码中红色部分没有写成: : p{+G
const char * cc = oss.str().c_str(); // error @g2cC
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 =Zu^8 0/
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。