Namespaces
Variants

std:: memcmp

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

Смотрите также

сравнивает две строки
(функция)
сравнивает определённое количество символов из двух строк
(функция)