次の方法で共有


CSimpleStringT::GetBuffer

CSimpleStringT オブジェクト用の内部文字バッファーへのポインターを返します。

PXSTR GetBuffer( 
   int nMinBufferLength 
); 
PXSTR GetBuffer();

パラメーター

  • nMinBufferLength
    文字バッファーが保持できる最小文字数。 この値には、終端文字 NULL 用の領域は含まれません。

    nMinBufferLength に現在のバッファー サイズを超える値を指定すると、GetBuffer は現在のバッファーを破棄し、要求されたサイズのバッファーを新しく割り当て、オブジェクトの参照カウントを 0 にリセットします。 対象のバッファーを以前に LockBuffer でロックしている場合でも、ロックが無効化されます。

戻り値

オブジェクトの (NULL で終わる) 文字バッファーへの PXSTR ポインター。

解説

CSimpleStringT オブジェクトのバッファーの内容を返すには、このメソッドを呼び出します。 戻り値の PXSTR は定数ではありません。したがって、CSimpleStringT の内容を直接変更できます。

GetBuffer で返されたポインターを使用して文字列の内容を変更する場合は、CSimpleStringT の他のメンバー メソッドを使用する前に、ReleaseBuffer を呼び出す必要があります。

ReleaseBuffer の呼び出し後に CSimpleStringT の操作を行うと、CSimpleStringT のバッファーが再割り当てされる場合があります。このような場合、GetBuffer で返されたアドレスは無効になります。 CSimpleStringT の長さを変更しないと、バッファーは再割り当てされません。

CSimpleStringT オブジェクトを破棄すると、バッファー メモリは自動的に解放されます。

文字列長を把握している限り、終端に NULL 文字を付け加える必要はありません。 ただし、ReleaseBuffer でバッファーを解放するときに、最終的な文字列長を指定する必要があります。 終端に NULL 文字を付けている場合は、長さとして –1 (既定値) を渡します。 この値を指定すると、ReleaseBuffer がバッファーの長さを決定します。

メモリが不足しているために GetBuffer 要求を満たすことができない場合、このメソッドは CMemoryException* をスローします。

使用例

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 クラス

CSimpleStringT::GetBufferSetLength

CSimpleStringT::ReleaseBuffer