memcmp
|
Определено в заголовочном файле
<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
|
|