Namespaces
Variants

memchr

From cppreference.net
< c ‎ | string ‎ | byte
Определено в заголовочном файле <string.h>
void * memchr ( const void * ptr, int ch, size_t count ) ;
(1)
/*QVoid*/ * memchr ( /*QVoid*/ * ptr, int ch, size_t count ) ;
(2) (начиная с C23)
1) Находит первое вхождение ( unsigned char ) ch в первых count байтах (каждый интерпретируется как unsigned char ) объекта, на который указывает ptr .
2) Обобщённая по типам функция, эквивалентная (1) . Пусть T будет неквалифицированным объектным типом (включая void ).
  • Если ptr имеет тип const T * , возвращаемый тип будет const void * .
  • Иначе, если ptr имеет тип T * , возвращаемый тип будет void * .
  • В противном случае поведение не определено.
Если макросное определение каждой из этих обобщённых функций подавлено для доступа к реальной функции (например, если используется ( memchr ) или указатель на функцию), становится видимым объявление реальной функции (1) .

Поведение не определено, если доступ происходит за пределами конца искомого массива. Поведение не определено, если ptr является нулевым указателем.

Эта функция ведет себя так, как если бы она читала байты последовательно и останавливалась, как только найден соответствующий байт: если массив, на который указывает ptr , меньше чем count , но совпадение найдено в пределах массива, поведение является корректно определенным.

(since C11)

Содержание

Параметры

ptr - указатель на объект для проверки
ch - байты для поиска
count - максимальное количество байт для проверки

Возвращаемое значение

Указатель на расположение байта или нулевой указатель, если такой байт не найден.

Пример

#include <stdio.h>
#include <string.h>
int main(void)
{
    const char str[] = "ABCDEFG";
    const int chars[] = {'D', 'd'};
    for (size_t i = 0; i < sizeof chars / (sizeof chars[0]); ++i)
    {
        const int c = chars[i];
        const char *ps = memchr(str, c, strlen(str));
        ps ? printf ("character '%c'(%i) found: %s\n", c, c, ps)
           : printf ("character '%c'(%i) not found\n", c, c);
    }
    return 0;
}

Возможный вывод:

character 'D'(68) found: DEFG
character 'd'(100) not found

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.24.5.1 Функция memchr (стр: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.24.5.1 Функция memchr (стр. 267-268)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.24.5.1 Функция memchr (стр. 367)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.21.5.1 Функция memchr (стр. 330)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.11.5.1 Функция memchr

Смотрите также

находит первое вхождение символа
(функция)
C++ documentation для memchr