std:: memcmp
|
Определено в заголовочном файле
<cstring>
|
||
|
int
memcmp
(
const
void
*
lhs,
const
void
*
rhs,
std::
size_t
count
)
;
|
||
Переинтерпретирует объекты, на которые указывают lhs и rhs как массивы типа unsigned char и сравнивает первые count байтов этих массивов. Сравнение выполняется лексикографически.
Знак результата — это знак разницы между значениями первой пары байтов (оба интерпретируются как unsigned char ), которые различаются в сравниваемых объектах.
Содержание |
Параметры
| lhs, rhs | - | указатели на буферы памяти для сравнения |
| count | - | количество байт для проверки |
Возвращаемое значение
Отрицательное значение, если первый различающийся байт (интерпретируемый как unsigned char ) в lhs меньше соответствующего байта в rhs .
0 если все count байты lhs и rhs равны.
Положительное значение, если первый отличающийся байт в lhs больше соответствующего байта в rhs .
Примечания
Эта функция читает
объектные представления
, а не значения объектов, и обычно имеет смысл только для тривиально копируемых объектов без заполнения. Например,
memcmp()
между двумя объектами типа
std::string
или
std::vector
не будет сравнивать их содержимое,
memcmp()
между двумя объектами типа
struct
{
char
c
;
int
n
;
}
будет сравнивать байты заполнения, значения которых могут различаться при одинаковых значениях
c
и
n
, и даже если бы не было байтов заполнения,
int
сравнивался бы без учёта порядка байтов.
Пример
#include <cstring> #include <iostream> void demo(const char* lhs, const char* rhs, std::size_t sz) { std::cout << std::string(lhs, sz); const int rc = std::memcmp(lhs, rhs, sz); if (rc < 0) std::cout << " precedes "; else if (rc > 0) std::cout << " follows "; else std::cout << " compares equal to "; std::cout << std::string(rhs, sz) << " in lexicographical order\n"; } int main() { 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
Смотрите также
|
сравнивает две строки
(функция) |
|
|
сравнивает определённое количество символов из двух строк
(функция) |
|
|
Документация C
для
memcmp
|
|