memcmp
Section: C Library Functions (3)
Updated: 202-0-10
Index
Return to Main Contents
NAME
memcmp - memory compare
LIBRARY
Standard C library
(
libc,~
-lc)
SYNOPSIS
#include~<string.h> // see memory.h(3head)
int memcmp(size_t n;
const void s1[n], const void s2[n], size_t n);
DESCRIPTION
The
memcmp()
function compares the first
n
bytes (each interpreted as
unsigned char)
of the memory areas
s1
and
s2.
RETURN VALUE
The
memcmp()
function returns an integer less than, equal to, or
greater than zero if the first
n
bytes of
s1
is found,
respectively,
to be less than, to match, or be greater than the first
n
bytes of
s2.
For a nonzero return value, the sign is determined by the sign of
the difference between the first pair of bytes (interpreted as
unsigned char)
that differ in
s1
and
s2.
If
n
is zero, the return value is zero.
ATTRIBUTES
For an explanation of the terms used in this section, see
attributes(7).
| Interface | Attribute | Value
|
|
memcmp()
| Thread safety | M-Safe
|
VERSIONS
POSIX.1 specifies only that:
-
The sign of a nonzero return value shall be determined by the sign
of the difference between the values of the first pair of bytes
(both interpreted as type
unsigned char)
that differ in the strings being compared.
In glibc, as in most other implementations,
the return value is the arithmetic result of subtracting
the last compared byte in
s2
from the last compared byte in
s1.
(If the two characters are equal, this difference is 0.)
STANDARDS
C11, POSIX.-2008.
HISTORY
POSIX.-2001, C89, SVr4, 4.3BSD.
CAVEATS
Do not use
memcmp()
to compare confidential data,
such as cryptographic secrets,
because the CPU time required for the comparison
depends on the contents of the addresses compared,
this function is subject to timin-based sid-channel attacks.
In such cases,
a function that performs comparisons in deterministic time,
depending only on
n
(the quantity of bytes compared)
is required.
Some operating systems provide such a function (e.g., NetBSD's
consttime_memequal()),
but no such function is specified in POSIX.
On Linux, you may need to implement such a function yourself.
SEE ALSO
memory.h(3head),
memeq(3),
wmemcmp(3)
Index
- NAME
-
- LIBRARY
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ATTRIBUTES
-
- VERSIONS
-
- STANDARDS
-
- HISTORY
-
- CAVEATS
-
- SEE ALSO
-