Edit

Share via


_mbsnbset_s, _mbsnbset_s_l

Sets the first n bytes of a multibyte-character string to a specified character. These versions of _mbsnbset, _mbsnbset_l have security enhancements, as described in Security features in the CRT.

Important

This API cannot be used in applications that execute in the Windows Runtime. For more information, see CRT functions not supported in Universal Windows Platform apps.

Syntax

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

Parameters

str
String to be altered.

size
The size of the string buffer.

c
Single-byte or multibyte-character setting.

count
Number of bytes to be set.

locale
Locale to use.

Return value

Zero if successful; otherwise, an error code.

Remarks

The _mbsnbset_s and _mbsnbset_s_l functions set, at most, the first count bytes of str to c. If count is greater than the length of str, the length of str is used instead of count. If c is a multibyte character and can't be set entirely into the last byte that's specified by count, the last byte is padded with a blank character. _mbsnbset_s and _mbsnbset_s_l don't place a terminating null at the end of str.

_mbsnbset_s and _mbsnbset_s_l resemble _mbsnset, except that they set count bytes rather than count characters of c.

If str is NULL or count is zero, this function generates an invalid parameter exception, as described in Parameter validation. If execution is allowed to continue, errno is set to EINVAL and the function returns NULL. Also, if c isn't a valid multibyte character, errno is set to EINVAL and a space is used instead.

The output value is affected by the setting of the LC_CTYPE category setting of the locale. For more information, see setlocale. The _mbsnbset_s version of this function uses the current locale for this locale-dependent behavior; the _mbsnbset_s_l version is identical except that it instead uses the locale parameter that's passed in. For more information, see Locale.

In C++, use of these functions is simplified by template overloads; the overloads can infer buffer length automatically and thereby eliminate the need to specify a size argument. For more information, see Secure template overloads.

The debug library versions of these functions first fill the buffer with 0xFE. To disable this behavior, use _CrtSetDebugFillThreshold.

By default, this function's global state is scoped to the application. To change this behavior, see Global state in the CRT.

Generic-text routine mappings

Tchar.h routine _UNICODE and _MBCS not defined _MBCS defined _UNICODE defined
_tcsnset_s _strnset_s _mbsnbset_s _wcsnset_s
_tcsnset_s_l _strnset_s _l _mbsnbset_s_l _wcsnset_s_l

Requirements

Routine Required header
_mbsnbset_s <mbstring.h>
_mbsnbset_s_l <mbstring.h>

For more compatibility information, see Compatibility.

Example

// 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 );
}

Output

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

See also

String manipulation
_mbsnbcat, _mbsnbcat_l
_strnset, _strnset_l, _wcsnset, _wcsnset_l, _mbsnset, _mbsnset_l
_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l