strchr、wcschr、_mbschr、_mbschr_l

使用当前区域设置或指定的 LC_CTYPE 转换状态类别,会找到字符串中的字符。

重要

_mbschr 和 _mbschr_l 不能用于在 Windows 运行时中执行的应用程序。有关详细信息,请参见 CRT functions not supported with /ZW(CRT 函数不支持使用/ZW)。

char *strchr(
   const char *str,
   int c 
);  // C only
char *strchr(
   char * str,
   int c 
); // C++ only
const char *strchr(
   const char * str,
   int c 
); // C++ only
wchar_t *wcschr(
   const wchar_t *str,
   wchar_t c 
); // C only
wchar_t *wcschr(
   wchar_t *str,
   wchar_t c 
);  // C++ only
const wchar_t *wcschr(
   const wchar_t *str,
   wchar_t c 
);  // C++ only
unsigned char *_mbschr(
   const unsigned char *str,
   unsigned int c 
); // C only
unsigned char *_mbschr(
   unsigned char *str,
   unsigned int c 
); // C++ only
const unsigned char *_mbschr(
   const unsigned char *str,
   unsigned int c 
); // C++ only
unsigned char *_mbschr_l(
   const unsigned char *str,
   unsigned int c,
   _locale_t locale
); // C only 
unsigned char *_mbschr_l(
   unsigned char *str,
   unsigned int c,
   _locale_t locale
); // C++ only
const unsigned char *_mbschr_l(
   const unsigned char *str,
   unsigned int c,
   _locale_t locale
); // C++ only

参数

  • str
    null 终止的源字符串。

  • c
    要定位的字符。

  • locale
    要使用的区域设置。

返回值

每一个函数都会返回一个指针指向str中的 c第一次出现的位置或者,如果c没有被发现,会指向NULL 。

备注

strchr 函数来查找 c 第一个匹配项 str,或者返回 NULL,如果未找到 c。 null 终止字符在搜索中。

wcschr, _mbschr 和 _mbschr_l 是 strchr的宽字符和多字符版本。 参数和 wcschr 的返回值是宽字符字符串;_mbschr 的参数和返回值为多字节字符字符串。 _mbschr 识别多字节字符序列。 还有,如果字符串是空指针,_mbschr 调用无效参数处理程序,如参数验证中所描述的。 如果允许继续执行, _mbschr 返回 NULL并设置errno 为 EINVAL。 strchr 和 wcschr 不验证其参数。 否则这三个函数否则具有相同行为。

输出值受区域设置的 LC_CTYPE 类别设置影响;有关更多信息,请参见 setlocale。 这些不带 _l 后缀的函数的版本使用为该区域设置相关的行为的当前区域设置;带有 _l 后缀的版本相同,只不过它们使用传递的区域设置参数。 有关详细信息,请参阅区域设置

在 C 中,这些函数采用第一个参数的一个 const 指针。 在 C++ 中,有两个重载可用。 采用指向 const 的指针的重载返回指向 const 的指针;采用指向非const 的版本的指针返回指向非const 的指针。 如果这些函数的 const 和非const 版本可用,则会定义宏 _CONST_CORRECT_OVERLOADS。 如果这两个 C++ 重载都需要非 const 行为,请定义符号 _CONST_RETURN。

一般文本例程映射

TCHAR.H 例程

未定义 _UNICODE & _MBCS

已定义 _MBCS

已定义 _UNICODE

_tcschr

strchr

_mbschr

wcschr

_n/a

_mbschr_l

要求

例程

必需的标头

strchr

<string.h>

wcschr

<string.h> 或 <wchar.h>

_mbschr, _mbschr_l

<mbstring.h>

有关兼容性的更多信息,请参见兼容性

示例

// crt_strchr.c
// 
// This program illustrates searching for a character
// with strchr (search forward) or strrchr (search backward).
//

#include <string.h>
#include <stdio.h>

int  ch = 'r';

char string[] = "The quick brown dog jumps over the lazy fox";
char fmt1[] =   "         1         2         3         4         5";
char fmt2[] =   "12345678901234567890123456789012345678901234567890";

int main( void )
{
   char *pdest;
   int result;

   printf_s( "String to be searched:\n      %s\n", string );
   printf_s( "      %s\n      %s\n\n", fmt1, fmt2 );
   printf_s( "Search char:   %c\n", ch );

   // Search forward. 
   pdest = strchr( string, ch );
   result = (int)(pdest - string + 1);
   if ( pdest != NULL )
      printf_s( "Result:   first %c found at position %d\n", 
              ch, result );
   else
      printf_s( "Result:   %c not found\n", ch );

   // Search backward. 
   pdest = strrchr( string, ch );
   result = (int)(pdest - string + 1);
   if ( pdest != NULL )
      printf_s( "Result:   last %c found at position %d\n", ch, result );
   else
      printf_s( "Result:\t%c not found\n", ch );
}
  

.NET Framework 等效项

System::String::IndexOf

请参见

参考

字符串操作 (CRT)

区域设置

多字节字符序列的解释

strcspn、wcscspn、_mbscspn、_mbscspn_l

strncat、_strncat_l、wcsncat、_wcsncat_l、_mbsncat、_mbsncat_l

strncmp、wcsncmp、_mbsncmp、_mbsncmp_l

strncpy、_strncpy_l、wcsncpy、_wcsncpy_l、_mbsncpy、_mbsncpy_l

_strnicmp、_wcsnicmp、_mbsnicmp、_strnicmp_l、_wcsnicmp_l、_mbsnicmp_l

strpbrk、wcspbrk、_mbspbrk、_mbspbrk_l

strrchr、wcsrchr、_mbsrchr、_mbsrchr_l

strstr、wcsstr、_mbsstr、_mbsstr_l