Spec-Zone.ru › C

memchr

Определено в заголовочном файле <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, но совпадение найдено внутри массива, поведение определено.

(с 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

Ссылки

  • Стандарт 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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/byte/memchr

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API