RtlStringCbPrintfExA 関数 (ntstrsafe.h)

RtlStringCbPrintfExW 関数と RtlStringCbPrintfExA 関数は、指定された書式設定情報に基づく書式設定を使用して、バイトカウントテキスト文字列を作成します。

構文

NTSTRSAFEDDI RtlStringCbPrintfExA(
  [out, optional] NTSTRSAFE_PSTR  pszDest,
  [in]            size_t          cbDest,
  [out, optional] NTSTRSAFE_PSTR  *ppszDestEnd,
  [out, optional] size_t          *pcbRemaining,
  [in]            DWORD           dwFlags,
  [in, optional]  NTSTRSAFE_PCSTR pszFormat,
                  ...             
);

パラメーター

[out, optional] pszDest

書式設定された null で終わる文字列を受け取る、呼び出し元が指定したバッファーへのポインター。 この関数は、 pszFormat によって提供される書式設定文字列と関数の引数リストの両方からこの文字列を作成します。 pszDest ポインターは NULL にできますが、dwFlags でSTRSAFE_IGNORE_NULLSが設定されている場合にのみ使用できます。

[in] cbDest

コピー先バッファーのサイズ (バイト単位)。 バッファーは、書式設定された文字列と終端の null 文字を含むのに十分な大きさである必要があります。

Unicode 文字列の場合、最大バイト数は NTSTRSAFE_MAX_CCH * sizeof(WCHAR) です。

ANSI 文字列の場合、最大バイト数は NTSTRSAFE_MAX_CCH * sizeof(char) です。

pszDestNULL の場合、cbDest は 0 である必要があります。

[out, optional] ppszDestEnd

呼び出し元が NULL 以外のアドレス ポインターを提供した場合、操作が完了すると、関数はそのアドレスを読み込み、宛先バッファーの結果の null 文字列ターミネータへのポインターを読み込みます。

[out, optional] pcbRemaining

呼び出し元が NULL 以外のアドレス ポインターを提供する場合、関数は、 pszDest が指すバッファー内にある未使用のバイト数 (終端の null 文字に使用されるバイトを含む) でアドレスを読み込みます。

[in] dwFlags

1 つ以上のフラグと、必要に応じて塗りつぶしバイト。 フラグは次のように定義されます。

意味
STRSAFE_FILL_BEHIND_NULL
set と 関数が成功した場合、 dwFlags の下位バイトを使用して、終端の null 文字に続く宛先バッファーの部分を埋めます。
STRSAFE_IGNORE_NULLS
設定されている場合は、 pszDest または pszSrc、またはその両方を NULL にすることができますNULLpszSrc ポインターは、コピーできる空の文字列 (TEXT("")) のように扱われます。 NULLpszDest ポインターは、空でない文字列を受け取ることができません。
STRSAFE_FILL_ON_FAILURE
set と 関数が失敗した場合、 dwFlags の下位バイトを使用して宛先バッファー全体を埋め、バッファーは null で終了します。 この操作により、既存のバッファーの内容が上書きされます。
STRSAFE_NULL_ON_FAILURE
set と 関数が失敗した場合、宛先バッファーは空の文字列 (TEXT("")) に設定されます。 この操作により、既存のバッファーの内容が上書きされます。
STRSAFE_NO_TRUNCATION
set が設定され、関数がSTATUS_BUFFER_OVERFLOWを返す場合、変換先バッファーの内容は変更されません。

[in, optional] pszFormat

printf スタイルの書式設定ディレクティブを含む null で終わるテキスト文字列へのポインター。 pszFormat ポインターは NULL にできますが、dwFlags でSTRSAFE_IGNORE_NULLSが設定されている場合にのみ使用できます。

...

pszFormat 文字列に含まれる書式設定ディレクティブに基づいて、関数によって解釈される引数の一覧。

戻り値

関数は、次の表に示す NTSTATUS 値のいずれかを返します。 NTSTATUS 値をテストする方法については、「 NTSTATUS 値の使用」を参照してください。

リターン コード 説明
STATUS_SUCCESS
この 成功 状態は、ソース データが存在し、出力文字列が切り捨てられずに作成され、結果の宛先バッファーが null で終了したことを意味します。
STATUS_BUFFER_OVERFLOW
この 警告 状態は、宛先バッファーの領域が不足しているため、操作が完了しなかったことを意味します。 dwFlags でSTRSAFE_NO_TRUNCATIONが設定されている場合、宛先バッファーは変更されません。 フラグが設定されていない場合、コピー先バッファーには、作成された文字列の切り捨てられたバージョンが含まれます。
STATUS_INVALID_PARAMETER
この エラー 状態は、関数が無効な入力パラメーターを受信したことを意味します。 詳細については、次の段落を参照してください。

関数は、次の場合にSTATUS_INVALID_PARAMETER値を返します。

  • 無効なフラグが指定されました。
  • cbDest の値が最大バッファー サイズより大きい。
  • 宛先バッファーは既にいっぱいでした。
  • null ポインターは、STRSAFE_IGNORE_NULLS フラグなしで存在していました。
  • 宛先バッファー ポインターは NULL ですが、バッファー サイズは 0 ではありません。
  • 宛先バッファー ポインターが NULL であるか、その長さが 0 であったが、0 以外の長さのソース文字列が存在していた。

注釈

RtlStringCbPrintfExWRtlStringCbPrintfExA は、次の関数の代わりに使用する必要があります。

  • sprintf
  • swprintf
  • _snprintf
  • _snwprintf
これらの関数はすべて、書式指定文字列と引数の一覧を受け入れ、それらを解釈し、書式設定された文字列を作成します。 コピー先バッファーのサイズ (バイト単位) は、バッファーの末尾を越えて書き込まないように、 RtlStringCbPrintfExWRtlStringCbPrintfExA に提供されます。

RtlStringCbPrintfExWRtlStringCbPrintfExA は、コピー先の文字列の末尾へのポインターと、その文字列で使用されていないバイト数を返すことによって、 RtlStringCbPrintf の機能を追加します。 フラグは、追加の制御のために 関数に渡すことができます。

RtlStringCbPrintfExW を使用して Unicode 文字列を処理し、RtlStringCbPrintfExA を使用して ANSI 文字列を処理します。 次の表に示すように、使用するフォームはデータによって異なります。

文字列データ型 文字列リテラル 機能
WCHAR L"string" RtlStringCbPrintfExW
char "string" RtlStringCbPrintfExA
 

pszDestpszFormat が重複する文字列を指している場合、または引数文字列が重複している場合、関数の動作は未定義です。

STRSAFE_IGNORE_NULLS フラグが設定されていない限り、 pszFormatpszDestNULL にすることはできません。この場合、どちらか一方または両方を NULL にすることができます。 pszDestNULL の場合、pszFormatNULL であるか、空の文字列を指す必要があります。

安全な文字列関数の詳細については、「安全な文字列関数の 使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP Service Pack 1 (SP1) 以降で使用できます。
対象プラットフォーム デスクトップ
Header ntstrsafe.h (Ntstrsafe.h を含む)
Library Ntstrsafe.lib
IRQL PASSIVE_LEVEL

こちらもご覧ください

RtlStringCbVPrintfEx

RtlStringCchPrintf

RtlStringCchPrintfEx