열렬히.뛰기

ft_memcmp

école 42 > libft > ft_memcmp

구현

  • strcmp와 비슷한 함수
  • 두 버퍼를 비교한다.

주의할 점

  • 메모리 자체를 비교하는 거라 ‘\0’값과 다른 값이 비교당하는 것도 생각해줘야 한다.

예시 1 : s2의 null과 해당 번째의 s1을 비교하고 있는가?

c
char *s1 = "atoms\0\0\0\0";
char *s2 = "atoms\0abc";

예시 2 : s2의 null과 해당 번째의 s1을 비교하고 있는가?

c
char *s1 = "\xff\0\0\xaa\0\xde\xffMACOSX\xff";
char *s2 = "\xff\0\0\xaa\0\xde\x00MBS";

따라서 strcmp의 while 조건을 다음과 같이 바꿔야 한다.

기존 : while (i < n + 1 && (n1[i] != '\0' || n2[i] != '\0'))

신규 : while (i < n)

코드

c
#include "libft.h"

int	ft_memcmp(const void *s1, const void *s2, size_t n)
{
	size_t			i;
	unsigned char	*n1;
	unsigned char	*n2;

	i = 0;
	n1 = (unsigned char *)s1;
	n2 = (unsigned char *)s2;
	while (i < n)
	{
		if (n1[i] != n2[i])
			return (n1[i] - n2[i]);
		i++;
	}
	return (0);
}