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