ft_memcmp 구현

yeonjkim·2021년 5월 25일
0

42seoul-libft

목록 보기
38/43

1. ft_memcmp 용도

* s1과 s2를 n바이트만큼 비교하는 함수.

* s1과 s2를 처음부터 비교하다가 서로 다른 것이 나오면 반환.

* s1의 값 > s2의 값 --> 양수, s1의 값 < s2의 값 --> 음수.

* n바이트까지 s1과 s2의 값이 모두 같다면 0반환.

2. ft_memcmp 프로토타입

int	ft_memcmp(const void *s1, const void *s2, size_t n)
const void *s1 : 비교할 문자열 1
const void *s2 : 비교할 문자열 2
size_t n : 비교할 바이트 수

3. 구현 시 유의사항

  • s1과 s2가 n바이트까지 모두 같다면 0반환.

  • index는 size_t n과 비교해야 하므로 size_t로 선언.

<중요>

  • s1과 s2를 unsigned char *로 형변환해야 한다.

    --> unsigned char모든 bit를 투명하게 볼 수 있는 특성을 제공한다.
    즉 다른 type은 내부 비트의 일부를 값을 표현하기 위한 용도가 아닌 다른 용도로 사용할 수 있으나 unsigned char는 이것이 허락되지 않아 mem함수, str함수에서는 unsigned char을 이용한다.

또한 메모리 주소의 경우 부호 있는 정수 타입을 쓰면 안된다.

4. 코드 구현

#include "libft.h"

int                     ft_memcmp(const void *s1, const void *s2, size_t n)
{
        size_t  index;
        unsigned char   *ss1;
        unsigned char   *ss2;

        index = 0;
        ss1 = (unsigned char *)(s1);//s1형변환
        ss2 = (unsigned char *)(s2);//s2형변환
        while (index < n)
        {
                if (ss1[index] != ss2[index])
                {
                        return (ss1[index] - ss2[index]);//두 값을 뺀 값 리턴
                }
                else
                        index++;
        }
        return (0);//모두 같다면 0리턴
}

5. 코드 구현 방법

(1) s1과 s2를 unsigned char *로 형변환.
(2) index가 n보다 작을 때까지 ss1과 ss2 비교.
(3) ss1과 ss2의 값이 다르다면 두 값의 차 리턴
(4) n까지 모두 같다면 0 리턴

0개의 댓글