#include "stdafx.h" 8g?2( MT;
F5+!Gb En
#include <iostream> %6x3G
#include <fstream> T#KVN{O
#include <sstream> ~ymSsoD^
#include <iterator> J&L#^f*d
using namespace std; 55Xfu/hQ
Xif>ZL?aXb
int main(int argc, char* argv[]) #dFE}!"#`
{ Y pvFv-
ifstream ifs("test.txt"); /PpZ6ne~[
if(!ifs) >ktekO:H
return false; 6ZQ$5PY
D 77$aCt
ostringstream oss; P)[QC
istream_iterator<char> inpos(ifs); WHr:M/qD
istream_iterator<char> endpos; v?o("I[ C
ostream_iterator<char> out(oss); 8\bZ?n#dn
std::copy(inpos, endpos, out); N.vkM`Z
string& szData = oss.str(); A{wk$`vH
>+%p}l:<\
const char * cc = szData.c_str(); WV;[v g]
// cout << (long)szData << endl; sUZ2A1J}
// cout << (long)oss.str().c_str() << endl; XUK%O8N#9
cout<< cc; =kw6<!R
;I>77gi`]
return 0; d 1 O+qS
} :eBp`dmn
\wp8kSzC
注意以上代码中红色部分没有写成: } 7i}dyQv}
const char * cc = oss.str().c_str(); // error k~]\kv=
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。 w69G6G(
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。