구현
- 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);
}