Spec-Zone.ru › C++

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

См. также

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

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

Spec-Zone.ru

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