RtlStringCchPrintfW 函数 (ntstrsafe.h)

RtlStringCchPrintfWRtlStringCchPrintfA 函数创建字符计数文本字符串,其格式基于提供的格式设置信息。

语法

NTSTRSAFEDDI RtlStringCchPrintfW(
  [out] NTSTRSAFE_PWSTR  pszDest,
  [in]  size_t           cchDest,
  [in]  NTSTRSAFE_PCWSTR pszFormat,
        ...              
);

参数

[out] pszDest

指向调用方提供的缓冲区的指针,该缓冲区接收格式化的以 null 结尾的字符串。 函数从 pszFormat 提供的格式字符串和函数的参数列表创建此字符串。

[in] cchDest

目标缓冲区的大小(以字符为单位)。 缓冲区必须足够大,才能包含格式化字符串以及终止 null 字符。 允许的最大字符数是 NTSTRSAFE_MAX_CCH

[in] pszFormat

指向包含 printf 样式 格式指令的以 null 结尾的文本字符串的指针。

...

函数根据 pszFormat 字符串中包含的格式设置指令解释的参数列表。

返回值

该函数返回下表中列出的 NTSTATUS 值之一。 有关如何测试 NTSTATUS 值的信息,请参阅 使用 NTSTATUS 值

返回代码 说明
STATUS_SUCCESS
成功 状态意味着源数据已存在,字符串是在未截断的情况下创建的,并且生成的目标缓冲区以 null 结尾。
STATUS_BUFFER_OVERFLOW
警告 状态表示由于目标缓冲区中的空间不足,操作未完成。 目标缓冲区包含输出字符串的截断版本。
STATUS_INVALID_PARAMETER
此错误状态表示函数收到了无效的输入参数。 有关详细信息,请参阅以下段落。

函数在以下情况下返回STATUS_INVALID_PARAMETER值:

  • cchDest 中的值大于最大缓冲区大小。
  • 目标缓冲区已满。
  • 存在 NULL 指针。
  • 目标缓冲区的长度为零,但存在非零长度源字符串。

注解

应使用 RtlStringCchPrintfWRtlStringCchPrintfA,而不是以下函数:

  • sprintf
  • swprintf
  • _snprintf
  • _snwprintf
所有这些函数都接受格式字符串和参数列表,并返回格式化字符串。 RtlStringCchPrintfWRtlStringCchPrintfA 接受目标缓冲区的大小(以字符为单位),以确保函数不会写入缓冲区末尾。

使用 RtlStringCchPrintfW 处理 Unicode 字符串,使用 RtlStringCchPrintfA 处理 ANSI 字符串。 使用的表单取决于数据。

字符串数据类型 字符串文本 函数
WCHAR L“string” RtlStringCchPrintfW
char “字符串” RtlStringCchPrintfA
 

如果 pszDest pszFormat 指向重叠的字符串,或者如果任何参数字符串重叠,则函数的行为未定义。

pszFormatpszDest 都不能为 NULL。 如果需要处理 NULL 字符串指针值,请使用 RtlStringCchPrintfEx

示例

以下示例演示了使用四个参数的 RtlStringCchPrintfW 的简单用法。

WCHAR pszDest[30]; 
size_t cchDest = 30;

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

NTSTATUS status = 
    RtlStringCchPrintfW(pszDest, cchDest, pszFormat, pszTxt, 1, 2, 3);

结果字符串为“答案为 1 + 2 = 3”。它包含在 pszDest 的缓冲区中。

有关安全字符串函数的详细信息,请参阅 使用安全字符串函数

要求

要求
最低受支持的客户端 从 Windows XP 开始提供 Service Pack 1 (SP1) 。
目标平台 桌面
标头 ntstrsafe.h (包括 Ntstrsafe.h)
Library Ntstrsafe.lib
IRQL 如果正在操作的字符串始终驻留在内存中,则为 Any,否则PASSIVE_LEVEL

另请参阅

RtlStringCbPrintf

RtlStringCchPrintfEx

RtlStringCchVPrintf