RtlStringCchCatExA 函数 (ntstrsafe.h)

RtlStringCchCatExWRtlStringCchCatExA 函数连接两个字符计数的字符串。

语法

NTSTRSAFEDDI RtlStringCchCatExA(
  [in, out, optional] NTSTRSAFE_PSTR  pszDest,
  [in]                size_t          cchDest,
  [in]                NTSTRSAFE_PCSTR pszSrc,
  [out, optional]     NTSTRSAFE_PSTR  *ppszDestEnd,
  [out, optional]     size_t          *pcchRemaining,
  [in]                DWORD           dwFlags
);

参数

[in, out, optional] pszDest

指向缓冲区的指针,该缓冲区在输入时包含以 null 结尾的字符串, pszSrc 将连接到该字符串。 在输出中,这是包含整个结果字符串的目标缓冲区。 pszSrc 处的字符串将添加到 pszDest 处的字符串末尾,以 null 字符结尾。 pszDest 指针可以为 NULL,但前提是在 dwFlags 中设置了STRSAFE_IGNORE_NULLS。

[in] cchDest

目标缓冲区的大小(以字符为单位)。 允许的最大字符数为NTSTRSAFE_MAX_CCH。 如果 pszDestNULL则 cchDest 必须为零。

[in] pszSrc

指向以 null 结尾的字符串的指针。 此字符串将连接到 pszDest 处缓冲区中包含的字符串的末尾。 pszSrc 指针可以为 NULL,但前提是在 dwFlags 中设置了STRSAFE_IGNORE_NULLS。

[out, optional] ppszDestEnd

如果调用方提供非 NULL 地址指针,则在串联操作完成后,函数会使用指向目标缓冲区生成的 null 字符串终止符的指针加载该地址。

[out, optional] pcchRemaining

如果调用方提供非 NULL 地址指针,则该函数将加载该地址,其中包含 pszDest 指向的缓冲区中未使用的字符数,包括终止 null 字符。

[in] dwFlags

一个或多个标志以及填充字节(可选)。 这些标志的定义如下:

含义
STRSAFE_FILL_BEHIND_NULL 如果设置且函数成功,则 dwFlags 的低字节用于填充目标缓冲区中终止 null 字符后面的部分。
STRSAFE_IGNORE_NULLS 如果已设置, 则 pszDestpszSrc 或两者都可以为 NULLNULLpszSrc 指针被视为空字符串 (TEXT (“”) ) 可以复制。 NULLpszDest 指针无法接收非空字符串。
STRSAFE_FILL_ON_FAILURE 如果设置并且函数失败,则 dwFlags 的低字节用于填充整个目标缓冲区,并且缓冲区以 null 结尾。 此操作将覆盖所有预先存在的缓冲区内容。
STRSAFE_NULL_ON_FAILURE 如果设置并且函数失败,目标缓冲区将设置为空字符串 (TEXT (“”) ) 。 此操作将覆盖所有预先存在的缓冲区内容。
STRSAFE_NO_TRUNCATION

如果设置了 ,并且函数返回STATUS_BUFFER_OVERFLOW:

  • 如果还指定了STRSAFE_FILL_ON_FAILURE,STRSAFE_NO_TRUNCATION相应地填充目标缓冲区。
  • 否则,目标缓冲区将不修改。

返回值

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

返回代码 说明
STATUS_SUCCESS 成功 状态表示源数据存在,输出字符串是在未截断的情况下创建的,并且生成的目标缓冲区以 null 结尾。
STATUS_BUFFER_OVERFLOW 警告 状态表示由于目标缓冲区中的空间不足,操作未完成。 如果设置了 STRSAFE_NO_TRUNCATION ,请参阅 dwFlags 参数了解详细信息。
STATUS_INVALID_PARAMETER

此错误状态表示函数收到了无效的输入参数。 有关详细信息,请参阅以下段落。

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

  • 指定的标志无效。
  • cchDest 中的值大于最大缓冲区大小。
  • 目标缓冲区已满。
  • 不存在STRSAFE_IGNORE_NULLS标志的 NULL 指针。
  • 目标缓冲区指针为 NULL,但缓冲区大小不为零。
  • 目标缓冲区指针为 NULL,或者其长度为零,但存在非零长度源字符串。

注解

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

  • strcat
  • wcscat

提供目标缓冲区的大小(以字符为单位),以确保 RtlStringCchCatExWRtlStringCchCatExA 不会写入缓冲区末尾。

RtlStringCchCatExWRtlStringCchCatExA 通过返回指向目标字符串末尾的指针以及目标缓冲区中未使用的字符数,为 RtlStringCchCat 的功能添加。 标志可以传递给 函数以用于其他控制。

使用 RtlStringCchCatExW 处理 Unicode 字符串,使用 RtlStringCchCatExA 处理 ANSI 字符串。 所使用的窗体取决于数据。

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

如果 pszSrcpszDest 指向重叠字符串,则函数的行为未定义。

除非设置了STRSAFE_IGNORE_NULLS标志,否则 pszSrcpszDest 都不能为 NULL ,在这种情况下,两者都可以为 NULL。 如果 pszDestNULL则 pszSrc 必须为 NULL 或指向空字符串。

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

要求

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

另请参阅