#include "stdafx.h"
?
#include <iostream>
#include <fstream>
#include <sstream>
#include <iterator>
using namespace std;
?
int main(int argc, char* argv[])
{
?ifstream ifs("test.txt");
?if(!ifs)
??return false;
?
?ostringstream oss;
?istream_iterator<char> inpos(ifs);
?istream_iterator<char> endpos;
?ostream_iterator<char> out(oss);
?std::copy(inpos, endpos, out);
?string& szData = oss.str();?
?
?const char * cc = szData.c_str();
//?cout << (long)szData << endl;
//?cout << (long)oss.str().c_str() << endl;
?cout<< cc;
?
?return 0;
}
?
??? 注意以上代碼中紅色部分沒(méi)有寫成:
??? const char * cc = oss.str().c_str(); // error
??? 要注意,oss.str()是值返回,所以這里會(huì)生成一個(gè)臨時(shí)變量,此時(shí)cc中的值是該臨時(shí)變量的內(nèi)存地址。所以當(dāng)此句執(zhí)行完成后,臨時(shí)變量被銷毀,cc便失效。
??? 所以要先對(duì)該臨時(shí)變量聲明一個(gè)引用,此時(shí)該臨時(shí)變量的生命周期便和szData一樣,所以這樣取到的cc所指向的內(nèi)存才是有效的。