memcmp
Определено в заголовочном файле <string.h> | ||
|---|---|---|
int memcmp( const void* lhs, const void* rhs, size_t count ); |
Сравнивает первые count байт объектов, на которые указывают lhs и rhs. Сравнение выполняется лексикографически.
Знак результата совпадает со знаком разности значений первой пары байт (интерпретируемых как unsignedchar), различающихся в сравниваемых объектах.
Поведение не определено, если обращение выходит за пределы любого из объектов, на которые указывают 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++ для memcmp |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/byte/memcmp