2개의 결과는 다르게 나오는경우가 있나요? 차이점?
중간에 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를 비교하는데, 예를 들면,
int strncmp(const char *str1, const char *str2, size_t n)
const char *str1 = "abc"; const char *str2 = "bcd";
strncmp(str1, str2, 1);하게 되면 (int)str1[0] 인 'a' 에서 (int)str2[0] 인 'b'을 빼서 같을 경우엔 0인 false를 반환합니다.
strncmp(str1, str2, 1);
하지만,int memcmp(const void *str1, const void *str2, size_t n) 은 두 문자열 str1과 str2의 메모리영역의 처음 n 바이트를 비교해서 정수를 반환합니다.
int memcmp(const void *str1, const void *str2, size_t n)
문자열간의 문자상수의 int형을 계산하는것과 문자열간의 메모리영역을 비교하는것은 당연히 차이가 있겠지요~
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
중간에 NULL 이 포함되면, 그 뒤의 내용이 틀려도 strncmp는 같
중간에 NULL 이 포함되면, 그 뒤의 내용이 틀려도 strncmp는 같다고
생각합니다.
"strcmp\0abc" , "strcmp\0123" 을 strncmp는 같다고 생각하지만
memcmp 로 위의 10 바이트를 검사하면 틀리다고 나옵니다.
이건 str 계열의 함수가 중간에 NULL을 만나면 종료하기 때문입니다.
그럼 고운 하루.
[re] strcmp 와 memcmp
int strncmp(const char *str1, const char *str2, size_t n)
은 n 만큼의 두 문자열 str1과 str2를 비교하는데, 예를 들면,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형을 계산하는것과 문자열간의 메모리영역을
비교하는것은 당연히 차이가 있겠지요~
댓글 달기