Namespaces
Variants

memcmp

From cppreference.net
< c ‎ | string ‎ | byte
Определено в заголовочном файле <string.h>
int memcmp ( const void * lhs, const void * rhs, size_t count ) ;

Сравнивает первые count байтов объектов, на которые указывают lhs и rhs . Сравнение выполняется лексикографически.

Знак результата — это знак разности между значениями первой пары байтов (оба интерпретируются как unsigned char ), которые различаются в сравниваемых объектах.

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

Содержание

Параметры

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

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

Отрицательное значение, если lhs появляется до rhs в лексикографическом порядке.

Ноль, если lhs и rhs равны, или если count равен нулю.

Положительное значение, если lhs следует после rhs в лексикографическом порядке.

Примечания

Эта функция читает представления объектов , а не значения объектов, и обычно имеет смысл только для байтовых массивов: структуры могут иметь байты заполнения с неопределёнными значениями, значения любых байтов за последним хранимым членом в объединении являются неопределёнными, и тип может иметь два или более представления для одного значения (разные кодировки для + 0 и - 0 или для + 0.0 и 0.0 , неопределённые биты заполнения внутри типа).

Пример

#include <stdio.h>
#include <string.h>
void demo(const char* lhs, const char* rhs, size_t sz)
{
    for(size_t n = 0; n < sz; ++n)
        putchar(lhs[n]);
    int rc = memcmp(lhs, rhs, sz);
    const char *rel = rc < 0 ? " precedes " : rc > 0 ? " follows " : " compares equal ";
    fputs(rel, stdout);
    for(size_t n = 0; n < sz; ++n)
        putchar(rhs[n]);
    puts(" in lexicographical order");
}
int main(void)
{
    char a1[] = {'a','b','c'};
    char a2[sizeof a1] = {'a','b','d'};
    demo(a1, a2, sizeof a1);
    demo(a2, a1, sizeof a1);
    demo(a1, a1, sizeof a1);
}

Вывод:

abc precedes abd in lexicographical order
abd follows abc in lexicographical order
abc compares equal to abc in lexicographical order

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.24.4.1 Функция memcmp (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.24.4.1 Функция memcmp (стр: 266)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.24.4.1 Функция memcmp (стр. 365)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.21.4.1 Функция memcmp (стр. 328)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.11.4.1 Функция memcmp

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

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