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 << " предшествует ";
else if (rc > 0)
std::cout << " следует за ";
else
std::cout << " равно ";
std::cout << std::string(rhs, sz) << " в лексикографическом порядке\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 предшествует abd в лексикографическом порядке
abd следует за abc в лексикографическом порядке
abc равно abc в лексикографическом порядке
Смотрите также
| сравнивает две строки (функция) | |
| сравнивает определённое количество символов двух строк (функция) | |
Документация C по memcmp
| |