##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::memcmp

From cppreference.com
< cpp‎ | string‎ | byte

Defined in header `<cstring>` |  |
int memcmp( const void* lhs, const void* rhs, std::size_t count ); |  |

Reinterprets the objects pointed to by `lhs` and `rhs` as arrays of unsigned char and compares the first `count` characters of these arrays. The comparison is done lexicographically.

The sign of the result is the sign of the difference between the values of the first pair of bytes (both interpreted as unsigned char) that differ in the objects being compared.

### [edit] Parameters

lhs, rhs | - | pointers to the memory buffers to compare
count | - | number of bytes to examine

### [edit] Return value

Negative value if the first differing byte (reinterpreted as unsigned char) in `lhs` is less than the corresponding byte in `rhs`.

​0​ if all `count` bytes of `lhs` and `rhs` are equal.

Positive value if the first differing byte in `lhs` is greater than the corresponding byte in `rhs`.

### [edit] Notes

This function reads object representations, not the object values, and is typically only meaningful for trivially-copyable objects with no padding. For example, `memcmp()` between two objects of type std::string or std::vector will not compare their contents, and `memcmp()` between two objects of type struct{char c; int n;} will compare the padding bytes whose values may differ when the values of c and n are the same.

### [edit] Example

Run this code

    #include <iostream>
    #include <cstring>

    void demo(const char* lhs, const char* rhs, std::size_t sz)
    {
        std::cout << std::string(lhs, sz);
        int rc = std::memcmp(lhs, rhs, sz);
        if(rc == 0)
            std::cout << " compares equal to ";
        else if(rc < 0)
            std::cout << " precedes ";
        else if(rc > 0)
            std::cout << " follows ";
        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);
    }

Output:

    abc precedes abd in lexicographical order
    abd follows abc in lexicographical order
    abc compares equal to abc in lexicographical order

### [edit] See also

strcmp | compares two strings (function) [edit]
strncmp | compares a certain amount of characters of two strings (function) [edit]
C documentation for memcmp

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/string/byte/memcmp&oldid=87835"