文字列の最初から文字列を検索する

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