Namespaces
Variants

std:: memcmp

From cppreference.net
헤더 파일에 정의됨 <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 의 해당 바이트보다 큰 경우 양의 값.

참고 사항

이 함수는 객체 표현 을 읽으며 객체 값을 읽지 않으며, 일반적으로 패딩이 없는 trivially-copyable 객체에만 의미가 있습니다. 예를 들어, 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

참고 항목

두 문자열을 비교합니다
(함수)
두 문자열에서 지정된 수의 문자를 비교합니다
(함수)