strcmp, strncmp 함수의 manual은 다음과 같다!

#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
strcmp, strncmp 함수는 NULL로 종료된 문자열 s1과 s2를 사전식으로 비교한다.
strncmp 함수는 최대 n문자까지 비교한다.
strncmp은 이진 데이터보다는 문자열 비교를 위한 함수로 '\0' 이후에 나오는 문자들은 비교하지 않는다.
strcmp, strncmp 함수는 s1이 클 때, 동일할 때, s2가 클 때 각각 양수, 0, 음수를 반환한다.
비교는 unsigned character로 진행된다. 그렇기에 '\200'은 '\0'보다 크다.
여기서 '\200'은 8비트 아스키 코드 값 200을 나타내고 이 값은 십진수로 128이다.
아스키 코드 값의 범위는 0부터 127까지이기에 128은 확장 아스키 코드에 속하는 문자이다.
int ft_strcmp(const char *s1, const char *s2)
{
/* 두 문자열이 같지 않을 떄 반복문 종료
* 만약 같아서 들어왔는데 두 문자가 NULL이면 break로 반복문 탈출
*/
while (*s1 == *s2)
{
if (*s1 == '\0' && *s2 == '\0')
break ;
s1++;
s2++;
}
return ((unsigned char)(*s1) - (unsigned char)(*s2));
}
int ft_strncmp(const char *s1, const char *s2, size_t n)
{
while (n > 0 && *s1 == *s2)
{
if (*s1 == '\0' && *s2 == '\0')
return (0);
s1++;
s2++;
n--;
}
if (n == 0)
return (0);
return ((unsigned char)(*s1) - (unsigned char)(*s2));
}