返回指定计数内的字符数或字节数。
重要
_mbsnbcnt
、_mbsnbcnt_l
、_mbsnccnt
和 _mbsnccnt_l
无法用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
size_t _strncnt(
const char *str,
size_t count
);
size_t _wcsncnt(
const wchar_t *str,
size_t count
);
size_t _mbsnbcnt(
const unsigned char *str,
size_t count
);
size_t _mbsnbcnt_l(
const unsigned char *str,
size_t count,
_locale_t locale
);
size_t _mbsnccnt(
const unsigned char *str,
size_t count
);
size_t _mbsnccnt_l(
const unsigned char *str,
size_t count,
_locale_t locale
);
参数
str
要检查的字符串。
count
要在 str
中检查的字符数或字节数。
locale
要使用的区域设置。
返回值
_mbsnbcnt
和 _mbsnbcnt_l
返回在 str
的前 count
个多字节字符中找到的字节数。 _mbsnccnt
和 _mbsnccnt_l
返回在 str
的前 count
个字节中找到的字符数。 如果在完成 str
的检查之前遇到空字符,则它们返回在此空字符之前找到的字节数或字符数。 如果 str
包含的字符或字节少于 count
个,则它们返回字符串中的字符数或字节数。 如果 count
小于零,则它们返回 0。 在以前的版本中,这些函数的返回值类型为 int
,而不是 size_t
。
_strncnt
返回单字节字符串 str
的前 count
个字节中的字符数。 _wcsncnt
返回宽字符字符串 str
的前 count
个宽字符中的字符数。
备注
_mbsnbcnt
和 _mbsnbcnt_l
计数在 str
的前 count
个多字节字符中找到的字节数。 _mbsnbcnt
和 _mbsnbcnt_l
替换 mtob
,而且应该用于代替 mtob
。
_mbsnccnt
和 _mbsnccnt_l
计数在 str
的前 count
个字节中找到的字符数。 如果 _mbsnccnt
和 _mbsnccnt_l
在双字节字符的第二个字节中遇到空字符,则第一个字节也被视为 null,并且不包括在返回的计数值中。 _mbsnccnt
和 _mbsnccnt_l
替换 btom
,而且应该用于代替 btom
。
如果 str
是 NULL
指针,或者 count
是 0,则这些函数调用无效的参数处理程序,如参数验证中所述,errno
设置为 EINVAL
,且函数返回 0。
输出值受区域设置的 LC_CTYPE
类别设置的影响。 有关详细信息,请参阅 setlocale
。 这些不带 _l
后缀的函数的版本使用为该区域设置相关的行为的当前区域设置;带有 _l
后缀的版本相同,只不过它们使用传递的区域设置参数。 有关详细信息,请参阅 Locale。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tcsnbcnt |
_strncnt |
_mbsnbcnt |
_wcsncnt |
_tcsnccnt |
_strncnt |
_mbsnbcnt |
不适用 |
_wcsncnt |
不适用 | 不适用 | _mbsnbcnt |
_wcsncnt |
不适用 | 不适用 | _mbsnccnt |
不适用 | 不适用 | _mbsnbcnt_l |
_mbsnccnt_l |
要求
例程 | 必需的标头 |
---|---|
_mbsnbcnt |
<mbstring.h> |
_mbsnbcnt_l |
<mbstring.h> |
_mbsnccnt |
<mbstring.h> |
_mbsnccnt_l |
<mbstring.h> |
_strncnt |
<tchar.h> |
_wcsncnt |
<tchar.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// crt_mbsnbcnt.c
#include <mbstring.h>
#include <stdio.h>
int main( void )
{
unsigned char str[] = "This is a multibyte-character string.";
unsigned int char_count, byte_count;
char_count = _mbsnccnt( str, 10 );
byte_count = _mbsnbcnt( str, 10 );
if ( byte_count - char_count )
printf( "The first 10 characters contain %d multibyte characters\n", char_count );
else
printf( "The first 10 characters are single-byte.\n");
}
输出
The first 10 characters are single-byte.
另请参阅
字符串操作
区域设置
多字节字符序列的解释
%>