Spec-Zone.ru › C++

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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/byte/memcmp

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API