次の方法で共有


CSimpleStringT::GetBuffer

更新 : 2007 年 11 月

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

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

パラメータ

  • nMinBufferLength
    文字バッファの最小サイズ (文字数)。この値には、終端文字 NULL 用の領域は含まれません。

戻り値

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

解説

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

kt26tkzx.alert_note(ja-jp,VS.90).gifメモ :

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

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

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

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

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

メモリが不足しているために 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 クラス

CSimpleStringT::GetBufferSetLength

CSimpleStringT::ReleaseBuffer

その他の技術情報

CSimpleStringT のメンバ