#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;
}
?
??? 注意以上代碼中紅色部分沒有寫成:
??? const char * cc = oss.str().c_str(); // error
??? 要注意,oss.str()是值返回,所以這里會生成一個臨時變量,此時cc中的值是該臨時變量的內存地址。所以當此句執行完成后,臨時變量被銷毀,cc便失效。
??? 所以要先對該臨時變量聲明一個引用,此時該臨時變量的生命周期便和szData一樣,所以這樣取到的cc所指向的內存才是有效的。