strstr, wcsstr, _mbsstr, _mbsstr_l

返回指向字符串中的搜索字符串的第一个匹配项的指针。

重要

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

语法

char *strstr(
   const char *str,
   const char *strSearch
); // C only
char *strstr(
   char *str,
   const char *strSearch
); // C++ only
const char *strstr(
   const char *str,
   const char *strSearch
); // C++ only
wchar_t *wcsstr(
   const wchar_t *str,
   const wchar_t *strSearch
); // C only
wchar_t *wcsstr(
   wchar_t *str,
   const wchar_t *strSearch
); // C++ only
const wchar_t *wcsstr(
   const wchar_t *str,
   const wchar_t *strSearch
); // C++ only
unsigned char *_mbsstr(
   const unsigned char *str,
   const unsigned char *strSearch
); // C only
unsigned char *_mbsstr(
   unsigned char *str,
   const unsigned char *strSearch
); // C++ only
const unsigned char *_mbsstr(
   const unsigned char *str,
   const unsigned char *strSearch
); // C++ only
unsigned char *_mbsstr_l(
   const unsigned char *str,
   const unsigned char *strSearch,
   _locale_t locale
); // C only
unsigned char *_mbsstr_l(
   unsigned char *str,
   const unsigned char *strSearch,
   _locale_t locale
); // C++ only
const unsigned char *_mbsstr_l(
   const unsigned char *str,
   const unsigned char *strSearch,
   _locale_t locale
); // C++ only

参数

str
要搜索的 null 终止的字符串。

strSearch
要搜索的以 null 结尾的字符串。

locale
要使用的区域设置。

返回值

如果 strSearch 未出现在 str 中,则返回指向 NULL 中的 strSearch 的第一个匹配项的指针,或返回 str。 如果 strSearch 指向长度为零的字符串,则函数返回 str

注解

strstr 函数返回指向 strSearch 中的 str 的第一个匹配项的指针。 搜索不包括终止 null 字符。 wcsstr 是宽字符版本的 strstr_mbsstr 是多字节字符版本。 wcsstr 的自变量和返回值为宽字符字符串。 _mbsstr 的自变量和返回值为多字节字符字符串。 _mbsstr 会验证其参数。 如果 strstrSearchNULL,会调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则 _mbsstrerrno 设置为 EINVAL,并返回 0。 strstrwcsstr 不会验证其参数。 否则这三个函数否则具有相同行为。

重要

这些函数可能从缓冲区溢出问题引发威胁。 缓冲区溢出问题可用来攻击系统,因为它们可能允许执行任意代码,这可能导致没有保证的权限提升。 有关详细信息,请参阅避免缓冲区溢出

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

输出值受 LC_CTYPE 的区域设置类别设置的影响;有关详细信息,请参阅setlocale_wsetlocale。 这些不带 _l 后缀的函数的版本将当前区域设置用于此依赖于区域设置的行为;带有 _l 后缀的版本与之相同,只不过它们改用传入的区域设置参数。 有关详细信息,请参阅 Locale

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

一般文本例程映射

TCHAR.H 例程 _UNICODE_MBCS 未定义 _MBCS 已定义 _UNICODE 已定义
_tcsstr strstr _mbsstr wcsstr
不适用 不适用 _mbsstr_l 不适用

要求

例程 必需的标头
strstr <string.h>
wcsstr <string.h><wchar.h>
_mbsstr_mbsstr_l <mbstring.h>

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

示例

// crt_strstr.c

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

char str[] =    "lazy";
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( "String to be searched:\n   %s\n", string );
   printf( "   %s\n   %s\n\n", fmt1, fmt2 );
   pdest = strstr( string, str );
   result = (int)(pdest - string + 1);
   if ( pdest != NULL )
      printf( "%s found at position %d\n", str, result );
   else
      printf( "%s not found\n", str );
}
String to be searched:
   The quick brown dog jumps over the lazy fox
            1         2         3         4         5
   12345678901234567890123456789012345678901234567890

lazy found at position 36

另请参阅

字符串操作
区域设置
多字节字符序列的解释
strcspnwcscspn_mbscspn_mbscspn_l
strcmpwcscmp_mbscmp
strpbrkwcspbrk_mbspbrk_mbspbrk_l
strrchrwcsrchr_mbsrchr_mbsrchr_l
strspnwcsspn_mbsspn_mbsspn_l
basic_string::find