Namespaces
Variants

strchr

From cppreference.net
< c ‎ | string ‎ | byte
定義先ヘッダ <string.h>
char * strchr ( const char * str, int ch ) ;
(1)
/*QChar*/ * strchr ( /*QChar*/ * str, int ch ) ;
(2) (C23以降)
1) ch を( char への変換を ( char ) ch によって行ったかのように) str が指すNULL終端バイト文字列内で最初に出現する位置を検索します(各文字は unsigned char として解釈されます)。終端のNULL文字は文字列の一部と見なされ、 ' \0 ' を検索する際に見つけることができます。
2) 型ジェネリック関数で (1) と同等の機能を持つ。 T を修飾子のない文字オブジェクト型とする。
  • str が型 const T * の場合、戻り値の型は const char * となる。
  • それ以外の場合、 str が型 T * の場合、戻り値の型は char * となる。
  • それ以外の場合、動作は未定義となる。
これらのジェネリック関数のマクロ定義が抑制されて実際の関数にアクセスする場合(例えば ( strchr ) や関数ポインタが使用される場合)、実際の関数宣言 (1) が可視となる。

str がヌル終端バイト文字列へのポインタでない場合、動作は未定義です。

目次

パラメータ

str - 解析対象のヌル終端バイト文字列へのポインタ
ch - 検索対象の文字

戻り値

見つかった文字へのポインタを str 内で返します。該当する文字が見つからない場合はヌルポインタを返します。

#include <stdio.h>
#include <string.h>
int main(void)
{
    const char *str = "Try not. Do, or do not. There is no try.";
    char target = 'T';
    const char* result = str;
    while((result = strchr(result, target)) != NULL)
    {
        printf("Found '%c' starting at '%s'\n", target, result);
        ++result; // Increment result, otherwise we'll find target at the same location
    }
}

出力:

Found 'T' starting at 'Try not. Do, or do not. There is no try.'
Found 'T' starting at 'There is no try.'

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 7.24.5.2 strchr関数 (p: TBD)
  • C17規格 (ISO/IEC 9899:2018):
  • 7.24.5.2 strchr関数 (p: TBD)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.24.5.2 strchr関数 (p: 367-368)
  • C99規格 (ISO/IEC 9899:1999):
  • 7.21.5.2 strchr関数 (p: 330)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 4.11.5.2 strchr関数

関連項目

配列から最初に現れる文字を検索する
(関数)
文字の最後の出現位置を検索する
(関数)
ある文字列中の任意の文字が別の文字列で最初に現れる位置を検索する
(関数)