RtlStringCbPrintfW 関数 (ntstrsafe.h)

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

構文

NTSTRSAFEDDI RtlStringCbPrintfW(
  [out] NTSTRSAFE_PWSTR  pszDest,
  [in]  size_t           cbDest,
  [in]  NTSTRSAFE_PCWSTR pszFormat,
        ...              
);

パラメーター

[out] pszDest

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

[in] cbDest

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

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

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

[in] pszFormat

printf スタイルの書式設定ディレクティブを含む null で終わるテキスト文字列へのポインター。

...

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

戻り値

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

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

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

  • cbDest の値が最大バッファー サイズを超えています。
  • 宛先バッファーは既にいっぱいでした。
  • NULL ポインターが存在しました。
  • コピー先バッファーの長さが 0 ですが、0 以外の長さのソース文字列が存在しました。

注釈

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

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

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

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

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

pszFormatpszDestNULL にすることはできません。 NULL 文字列ポインター値を処理する必要がある場合は、RtlStringCbPrintfEx を使用します

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

次の例は、4 つの引数を使用した RtlStringCbPrintfW の基本的な使用方法を示しています。

int const arraysize = 30;
WCHAR pszDest[arraysize]; 
size_t cbDest = arraysize * sizeof(WCHAR);

LPCWSTR pszFormat = L"%s %d + %d = %d.";
WCHAR* pszTxt = L"The answer is";

NTSTATUS status = RtlStringCbPrintfW(pszDest, cbDest, pszFormat, pszTxt, 1, 2, 3);

結果の文字列は"回答は 1 + 2 = 3" です。 pszDest のバッファーに含まれています。

要件

要件
サポートされている最小のクライアント Windows XP Service Pack 1 (SP1) 以降で使用できます。
対象プラットフォーム デスクトップ
Header ntstrsafe.h (Ntstrsafe.h を含む)
Library Ntstrsafe.lib
IRQL 操作される文字列が常にメモリ内に存在する場合は 、それ以外の場合は PASSIVE_LEVEL

こちらもご覧ください

RtlStringCbPrintfEx

RtlStringCbVPrintf

RtlStringCchPrintf