GetBufferSetLength概述
聲明LPTSTRGetBufferSetLength(int nNewLength);
throw(CMemoryException);
申請一個指定長度的空間
返回值(原文)An LPTSTRpointer to the object’s (null-terminated) character buffer
返回生成的指定長度的空間指針
參數:int型 nNewLength :
(原文)The exact size of the CString character buffer in characters
指明了長度大小
註解
1、GetBufferSetLength 分配新的記憶體,同時將nNewLength的值設定為參數中指定的值。
2、它申請一個指定長度的空間, 即使裡面最終保存的字元串長度小於申請的空間長度, 也不會將多餘空間釋放。
3、改變緩衝區的大小,會將字元串的長度設定為緩衝區的大小。
例子
例一:
CString csStr;
LPTSTR lpsz = csStr.GetBufferSetLength(100);
lpsz[0] = 'a';
lpsz[1] = 'b';
lpsz[2] = '\0';
int nLength = csStr.GetLength();
/* n的值還是為100 */
例二:
GetBufferSetLength(20);
truncating or growing its length if necessary to exactly match the length,這裡是20。
根據你指定的長度來動態的擴展或者縮減20, 所以小於20的串長度是20,一旦緩衝區被release了,自然就享受不到這種動態擴展功能的了,所以最後面就變成實際的3了比較 GetBuffer和ReleaseBuffer、GetBufferSetLength CString類的這幾個函式
GetBuffer和ReleaseBuffer是一套需要配合使用的函式, 與GetBufferSetLength相比, 優點是如果分配的空間大於實際保存的字元串(0結尾), ReleaseBuffer會把多余申請的空間釋放, 歸還給系統; 但使用時需要注意以下問題: 如果要保存的字元串為abc(0結尾), 則GetBuffer參數應至少為3; 如果要保存的內容不是以0結尾, 比如是讀取檔案數據, 則GetBuffer參數如果大於檔案長度時, ReleaseBuffer參數一定要為檔案長度(如果GetBuffer參數為檔案長度的話不存在問題, ReleaseBuffer參數可以為默認-1)!
CString csStr;LPTSTR lpsz = csStr.GetBuffer(100);lpsz[0] = 'a';lpsz[1] = 'b';lpsz[2] = '\0';csStr.ReleaseBuffer();int nLength = csStr.GetLength();/* n的值為2 */ |
​ |
GetBufferSetLength相對比較容易理解, 它申請一個指定長度的空間, 即使裡面最終保存的字元串長度小於申請的空間長度, 也不會將多餘空間釋放.
CString csStr;LPTSTR lpsz = csStr.GetBufferSetLength(100);lpsz[0] = 'a';lpsz[1] = 'b';lpsz[2] = '\0';int nLength = csStr.GetLength();/* n的值還是為100 */ |