#include "stdafx.h" NcL
=zo<
SNvb1&
#include <iostream> )LswSV
#include <fstream> CKTrZxR"
#include <sstream> p27p~b&
#include <iterator> ma}}Sn)Q
using namespace std; xaXV^ZM3
"@/ba!L+
int main(int argc, char* argv[]) PW_`qP:
{ _1JmjIH)M
ifstream ifs("test.txt"); =aow
d4t
if(!ifs) ) Ypz!
return false; J0Four#MD
\;
bWh
ostringstream oss; tE!'dpG5)
istream_iterator<char> inpos(ifs); \7E`QY4
istream_iterator<char> endpos; ~eo^`4O{{
ostream_iterator<char> out(oss); |vy]8?Ak
std::copy(inpos, endpos, out); *1;23BiH-
string& szData = oss.str(); 0|2%# E
y'rN5J:l
const char * cc = szData.c_str(); b~!om
// cout << (long)szData << endl; ,o&<WMD
// cout << (long)oss.str().c_str() << endl; i=Kvz4h
cout<< cc; -Uf4v6A
spiDm:Xe
return 0; ~yN(-I1P
} * NMQ
Am7| /
注意以上代码中红色部分没有写成: fH!=Zb_{8
const char * cc = oss.str().c_str(); // error 7l}~4dm2J
要注意,oss.str()是值返回,所以这里会生成一个临时变量,此时cc中的值是该临时变量的内存地址。所以当此句执行完成后,临时变量被销毁,cc便失效。
d]k='
所以要先对该临时变量声明一个引用,此时该临时变量的生命周期便和szData一样,所以这样取到的cc所指向的内存才是有效的。