Пространства имён
Варианты
Действия

std::memcmp

Материал из cppreference.com
< cpp‎ | string‎ | byte
 
 
 
Однобайтовые строки с завершающим нулём
Функции
Манипуляции с символами
Преобразование в числовые форматы
(C++11)(C++11)
(C++11)(C++11)
Манипуляции со строками
Проверка строки
Манипуляции с памятью
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 в лексикографическом порядке

[править] Смотрите также

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