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
|