文字列の最初から文字列を検索する
strstr、wcsstr、_mbsstr
【書式】
char *strstr(
const char *string,
const char *strSearch
);
wchar_t *wcsstr(
const wchar_t *string,
const wchar_t *strSearch
);
unsigned char *_mbsstr(
const unsigned char *string,
const unsigned char *strSearch);
【引数】
string NULLで終わる検索対象の文字列
strSearch NULLで終わる文字セット
【戻り値】
strSearchがstring内で最初に出現する位置を指すポインタを返します。string内でstrSearchが見つからなかった場合は、NULLを返します。strSearchが長さ0の文字列を指す場合は、stringを返します。
【機能】
strstr関数は、string内で strSearchが最初に出現する位置を指すポインタを返します。
検索には、終端のNULL文字は含まれません。
wcsstr関数と_mbsstr関数は、strstr関数のワイド文字バージョンとマルチバイト文字バージョンです。
wcsstr関数の引数と戻り値はワイド文字列で、_mbsstr関数の引数と戻り値はマルチバイト文字列です。
それ以外では、これらの関数の動作は同じです。
これらの関数は、バッファ オーバーランが原因で発生する可能性のある問題の影響を受けます。
バッファ オーバーランは、システムを攻撃するときによく使用される方法であり、
その結果、認められていない権限が昇格されます。
詳細については、「Avoiding Buffer Overruns」を参照してください。
【インクルードファイル】
strstr関数 string.h
wcsstr関数 string.h または wchar.h
_mbsstr関数 mbstring.h
【TCHAR使用時の対応表】
TCHAR | _UNICODE、_MBCS が 未定義 |
_MBCS が 定義されている |
_UNICODE が 定義されている |
---|---|---|---|
_tcsstr | strstr | _mbsstr | wcsstr |
【必要追加ライブラリ】
なし
使用例
〈サンプルプログラム〉
#include <string.h>
#include <stdio.h>
int main(void)
{
char str[] = "lazy";
char string[] = "The quick brown dog jumps over the lazy fox";
char fmt1[] = " 1 2 3 4 5";
char fmt2[] = "12345678901234567890123456789012345678901234567890";
char *pdest;
int result;
printf("検索文字列:\n %s\n", string);
printf(" %s\n %s\n\n", fmt1, fmt2);
pdest = strstr(string, str);
result = (int)(pdest - string + 1);
if(NULL != pdest)
{
printf("%s がある場所は %d\n", str, result);
}
else
{
printf("%s は含まれていません。\n", str);
}
return 0;
}
〈出力〉
検索文字列: The quick brown dog jumps over the lazy fox 1 2 3 4 5 12345678901234567890123456789012345678901234567890 lazy がある場所は 36