_mbsnbset_s_mbsnbset_s_l

将一个多字节字符串的前 n 个字节设置为指定字符。 这些版本的 _mbsnbset_mbsnbset_l 具有安全增强功能,如 CRT 中的安全功能中所述。

重要

此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数

语法

errno_t _mbsnbset_s(
   unsigned char *str,
   size_t size,
   unsigned int c,
   size_t count
);
errno_t _mbsnbset_s_l(
   unsigned char *str,
   size_t size,
   unsigned int c,
   size_t count,
   _locale_t locale
);
template <size_t size>
errno_t _mbsnbset_s(
   unsigned char (&str)[size],
   unsigned int c,
   size_t count
); // C++ only
template <size_t size>
errno_t _mbsnbset_s_l(
   unsigned char (&str)[size],
   unsigned int c,
   size_t count,
   _locale_t locale
); // C++ only

参数

str
要修改的字符串。

size
字符串缓冲区的大小。

c
单字节或多字节字符设置。

count
要设置的字节数。

locale
要使用的区域设置。

返回值

如果成功,则为零;否则为错误代码。

注解

_mbsnbset_s_mbsnbset_s_l 函数最多将 str 的前 count 个字节设置为 c。 如果 count 大于 str 的长度,则会使用 str 的长度而使用 count。 如果 c 是多字节字符,且不能完全设置到由 count 指定的最后一个字节中,则用空白字符填充最后一个字节。 _mbsnbset_s_mbsnbset_s_l 未在 str 的末尾放置终止 null。

_mbsnbset_s_mbsnbset_s_l 类似于 _mbsnset,只不过它们设置 ccount 个字节而不是 count 个字符。

如果 strNULLcount 为零,则此函数将生成无效参数异常,如参数验证中所述。 如果允许继续执行,则将 errno 设置为 EINVAL 并且该函数返回 NULL中所述。 此外,如果 c 不是有效的多字节字符,则将 errno 设置为 EINVAL,并改用一个空格。

输出值受区域设置的 LC_CTYPE 类别设置的影响。 有关详细信息,请参阅 setlocale。 此函数的 _mbsnbset_s 版本对与区域设置相关的行为使用当前区域设置,_mbsnbset_s_l 版本基本相同,但它改用传入的区域设置参数。 有关详细信息,请参阅 Locale

在 C++ 中,这些函数的使用由模板重载简化;重载可以自动推导出缓冲区长度,从而不再需要指定大小自变量。 有关详细信息,请参阅安全模板重载

这些函数的调试库版本首先用 0xFE 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

一般文本例程映射

Tchar.h 例程 _UNICODE_MBCS 未定义 _MBCS 已定义 _UNICODE 已定义
_tcsnset_s _strnset_s _mbsnbset_s _wcsnset_s
_tcsnset_s_l _strnset_s _l _mbsnbset_s_l _wcsnset_s_l

要求

例程 必需的标头
_mbsnbset_s <mbstring.h>
_mbsnbset_s_l <mbstring.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// crt_mbsnbset_s.c
#include <mbstring.h>
#include <stdio.h>

int main( void )
{
   char string[15] = "This is a test";
   /* Set not more than 4 bytes of string to be *'s */
   printf( "Before: %s\n", string );
   _mbsnbset_s( string, sizeof(string), '*', 4 );
   printf( "After:  %s\n", string );
}

输出

Before: This is a test
After:  **** is a test

另请参阅

字符串操作
_mbsnbcat_mbsnbcat_l
_strnset_strnset_l_wcsnset_wcsnset_l_mbsnset_mbsnset_l
_strset_strset_l_wcsset_wcsset_l_mbsset_mbsset_l