본문 바로가기
Dev/C\C++

[C/C++] memcmp

by Ladun 2019. 11. 2.

(string.h에 선언되어 있음.)

  • memcmp(포인터1, 포인터2, 크기);
    • int memcmp(void* ptr1, void* ptr2 size_t _Size);
    • 결과에 따른 정수 값을 리턴

두 개의 메모리 블록을 비교한다.

ptr1이 가리키는 처음 _Size 바이트의 데이터와 ptr2 가 가리키는 처음 _Size 바이트의 데이터를 비교하여 이들이 같다면 0 을 리턴하고 다르다면 0 이 아닌 값을 리턴한다. 이 때 리턴되는 값은 아래를 참고.

인자

ptr1

메모리 블럭을 가리키는 포인터이다.

ptr2 

메모리 블럭을 가리키는 포인터이다.

_Size

비교할 바이트의 수를 나타낸다.

 

리턴값

두 개의 메모리 블록의 관계에 따라 아래와 같이 정수 값을 리턴한다.

  • 만일 두 메모리 블록이 정확히 같다면 0 을 리턴한다.

  • 만일 두 메모리 블록이 다를 경우, ptr1  ptr2 가 가리키는 메모리 블록에서 앞에서 부터 처음으로 다른 바이트를 살펴 보는데, 그 바이트를 unsigned char 로 해석하였을 때, 그 값이 ptr1 이 더 크면 0 보다 큰 값을, 아니면 0 보다 작은 값을 리턴한다.

예시1

#include <stdio.h>
#include <string.h>

int main() {
  char str1[256];
  char str2[256];
  int n;
  size_t len1, len2;

  printf("Enter a sentence: ");
  scanf("%s", str1);

  printf("Enter another sentence: ");
  scanf("%s", str2);

  len1 = strlen(str1);
  len2 = strlen(str2);

  n = memcmp(str1, str2, len1 > len2 ? len1 : len2);

  if (n > 0) {
    printf("'%s' is greater than '%s'.\n", str1, str2);
  } else if (n < 0) {
    printf("'%s' is less than '%s'.\n", str1, str2);
  } else {
    printf("'%s' is the same as '%s'.\n", str1, str2);
  }
  return 0;
}

결과1

Enter a sentence: abcde
Enter another sentence: adecd
'abcde' is less than 'adecd'

참고자료

'Dev > C\C++' 카테고리의 다른 글

[C++] 함수와 const  (0) 2019.12.30
[C/C++] free  (0) 2019.11.07
[C/C++] malloc  (0) 2019.11.07
[C/C++] memset  (0) 2019.11.01
[C/C++] memcpy  (0) 2019.11.01