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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/byte/memcmp