返回字符串中第一个匹配项的索引,以及属于一个字符集的字符的索引。
重要
_mbschr
和 _mbschr_l
无法用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
size_t strcspn(
const char *str,
const char *strCharSet
);
size_t wcscspn(
const wchar_t *str,
const wchar_t *strCharSet
);
size_t _mbscspn(
const unsigned char *str,
const unsigned char *strCharSet
);
size_t _mbscspn_l(
const unsigned char *str,
const unsigned char *strCharSet,
_locale_t locale
);
参数
str
null 终止的搜索字符串。
strCharSet
null 终止的字符集。
locale
要使用的区域设置。
返回值
这些函数返回 strCharSet
中的 str
的第一个字符的索引。 如果 str
的所有字符都不在 strCharSet
中,则返回值为 str
的长度。
没有保留任何返回值以指示错误。
备注
wcscspn
和 _mbscspn
分别是 strcspn
的宽字符及多字节字符版本。 wcscspn
的自变量是宽字符字符串。 _mbscspn
的自变量和返回值为多字节字符字符串。
_mbscspn
会验证其参数。 如果 str
或 strCharSet
是 null 指针,则调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则该函数将返回 0 并将 errno
设置为 EINVAL
。 strcspn
和 wcscspn
不会验证其参数。 否则这三个函数否则具有相同行为。
输出值受区域设置的 LC_CTYPE
类别设置的影响。 有关详细信息,请参阅 setlocale
。 这些不带 _l
后缀的函数的版本使用为该区域设置相关的行为的当前区域设置;带有 _l
后缀的版本相同,只不过它们使用传递的区域设置参数。 有关详细信息,请参阅 Locale。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
TCHAR.H 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tcscspn |
strcspn |
_mbscspn |
wcscspn |
要求
例程 | 必需的标头 |
---|---|
strcspn |
<string.h> |
wcscspn |
<string.h> 或 <wchar.h> |
%> | <mbstring.h> |
有关兼容性的详细信息,请参阅 兼容性。
示例
// crt_strcspn.c
#include <string.h>
#include <stdio.h>
void test( const char * str, const char * strCharSet )
{
int pos = strcspn( str, strCharSet );
printf( "strcspn( \"%s\", \"%s\" ) = %d\n", str, strCharSet, pos );
}
int main( void )
{
test( "xyzbxz", "abc" );
test( "xyzbxz", "xyz" );
test( "xyzbxz", "no match" );
test( "xyzbxz", "" );
test( "", "abc" );
test( "", "" );
}
strcspn( "xyzbxz", "abc" ) = 3
strcspn( "xyzbxz", "xyz" ) = 0
strcspn( "xyzbxz", "no match" ) = 6
strcspn( "xyzbxz", "" ) = 6
strcspn( "", "abc" ) = 0
strcspn( "", "" ) = 0