C Programing
strncmp 와 memcmp 차이?
지에또일
2010. 10. 1. 11:17
출처: http://kldp.org/node/29
중간에 NULL 이 포함되면, 그 뒤의 내용이 틀려도 strncmp는 같다고
생각합니다.
"strcmp\0abc" , "strcmp\0123" 을 strncmp는 같다고 생각하지만
memcmp 로 위의 10 바이트를 검사하면 틀리다고 나옵니다.
이건 str 계열의 함수가 중간에 NULL을 만나면 종료하기 때문입니다.
int strncmp(const char *str1, const char *str2, size_t n)
은 n 만큼의 두 문자열 str1과 str2를 비교하는데, 예를 들면,
const char *str1 = "abc"; const char *str2 = "bcd";
strncmp(str1, str2, 1);
하게 되면 (int)str1[0] 인 'a' 에서 (int)str2[0] 인 'b'을 빼서 같을 경우엔 0인 false를 반환합니다.
하지만,
int memcmp(const void *str1, const void *str2, size_t n)
은 두 문자열 str1과 str2의 메모리영역의 처음 n 바이트를 비교해서
정수를 반환합니다.
문자열간의 문자상수의 int형을 계산하는것과 문자열간의 메모리영역을
비교하는것은 당연히 차이가 있겠지요~