CSimpleStringT::GetBuffer
更新 : 2007 年 11 月
CSimpleStringT オブジェクト用の内部文字バッファへのポインタを返します。
PXSTR GetBuffer(
int nMinBufferLength
);
PXSTR GetBuffer( );
パラメータ
- nMinBufferLength
文字バッファの最小サイズ (文字数)。この値には、終端文字 NULL 用の領域は含まれません。
戻り値
オブジェクトの (NULL で終わる) 文字バッファへの PXSTR ポインタ。
解説
CSimpleStringT オブジェクトのバッファの内容を返すには、このメソッドを呼び出します。戻り値の PXSTR は定数型 (const) ではありません。したがって、CSimpleStringT の内容を直接変更できます。
メモ : |
---|
nMinBufferLength に現在のバッファ サイズを超える値を指定すると、GetBuffer は現在のバッファを破棄し、要求されたサイズのバッファを新しく割り当て、参照カウントを 0 にリセットします。対象のバッファを以前に LockBuffer でロックしている場合でも、ロックが無効化されます。 |
GetBuffer で返されたポインタを使用して文字列の内容を変更する場合は、CSimpleStringT の他のメンバ メソッドを使用する前に、ReleaseBuffer を呼び出す必要があります。
ReleaseBuffer の呼び出し後に CSimpleStringT の操作を行うと、CSimpleStringT のバッファが再割り当てされる場合があります。このような場合、GetBuffer で返されたアドレスは無効になります。CSimpleStringT の長さを変更しないと、バッファは再割り当てされません。
CSimpleStringT オブジェクトを破棄すると、バッファ メモリは自動的に解放されます。
文字列長を把握している限り、終端に NULL 文字を付け加える必要はありません。ただし、ReleaseBuffer でバッファを解放するときは、最終的な文字列長を指定する必要があります。終端に NULL 文字を付け加える場合は、ReleaseBuffer に引数として –1 (既定値) を渡します。この引数を受け取ると、ReleaseBuffer は strlen を実行してバッファの長さを決定します。
メモリが不足しているために GetBuffer 要求を満たすことができない場合、このメソッドは例外をスローします。
使用例
CSimpleString s(_T("abcd"), pMgr);
LPTSTR pBuffer = s.GetBuffer(10);
int sizeOfBuffer = s.GetAllocLength();
// Directly access CSimpleString buffer
_tcscpy_s(pBuffer, sizeOfBuffer, _T("Hello"));
ASSERT(_tcscmp(s, _T("Hello")) == 0);
s.ReleaseBuffer();
必要条件
ヘッダー : atlsimpstr.h
参照
参照
CSimpleStringT::GetBufferSetLength