返回指向字符串中的搜索字符串的第一个匹配项的指针。
重要
_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
会验证其参数。 如果 str
或 strSearch
是 NULL
,会调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则 _mbsstr
将 errno
设置为 EINVAL
,并返回 0。 strstr
和 wcsstr
不会验证其参数。 否则这三个函数否则具有相同行为。
重要
这些函数可能从缓冲区溢出问题引发威胁。 缓冲区溢出问题可用来攻击系统,因为它们可能允许执行任意代码,这可能导致没有保证的权限提升。 有关详细信息,请参阅避免缓冲区溢出。
在 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> |
%> | <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