본문으로 바로가기
728x90
반응형
strcmp() 함수의 헤더 파일
#include <string.h>

 

strcmp() 함수의 원형
int strcmp(const char * str1, const char * str2);

 

Parameter
str1
비교할 첫 번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있다.

str2
비교할 두번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있다.

 

리턴 값
세 가지 형태로 리턴됩니다.

1. str1이 str2보다 클 경우 => 0보다 큰 값을 리턴
(첫 번째 인자의 문자가 두 번째 인자의 문자보다 큰 경우)

2. str1이 str2보다 작은 경우 => 0보다 작은 값을 리턴
(첫 번째 인자의 문자가 두 번째 인자의 문자보다 작은 경우)

3. str1과 str2가 같을 경우 => 0을 리턴
(첫번째 인자와 두 번째 인자의 문자가 모두 같을 경우)

※자세한 사항은 아래에 기재되어 있어요※

 

strcmp() 함수는 다들 아시다시피 문자열 비교 함수입니다.

str1이 가리키는 메모리 역역과 str2 메모리 영역을 비교해주는 함수이죠!!!

memcmp() 함수와는 다르게 비교하고자 하는 byte 수가 없어서 문자열의 끝을 확인하기 위해 '\0' 문자를 이용합니다.

 

Θ strcmp() 함수는 어떻게 동작하는 걸까요?

 

위에서 설명드렸다시피 strcmp() 함수는 str1, str2문자열에서 '\0' 문자를 찾아 비교할 크기를 찾고 비교를 시작합니다.

 

Θ 그럼 strcmp() 함수의 str1과 str2의 문자열 길이가 다르면 어떻게 될까요?

 

비교하고자 하는 str1, str2 문자열의 길이가 다르면 긴 문자열의 길이를 따라가요!!

예를들면 str1 문자열의 길이가 13byte 이고 str2 문자열의 길이가 20byte이면 20byte까지 문자열을 비교하게 됩니다.

그 반대의 경우도 마찬가지입니다.

 

아래의 그림에서 처럼 13byte까지는 "HELLO WORLD!!"는 동일하고 다음 14byte를 비교할때 str1의 '\0' 과 str2의 '!' 문자를 비교하게 되어 '!' 문자열이 더 크다는 결과가 나옵니다.

 

 

자 이제 실제 코드를 확인해보죠!

 

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

int main(){
  char str1[20] = "HELlo world!!";
  char str2[20] = "HELLO WORLD!!";
  char str3[20] = "HELLO WORLD!!";
  char *p;
  int ret = 0;

  ret = strcmp(str1, str2);		//str1을 str2로 비교

  printf("/%s/ > /%s/ : %d\r\n", str1, str2, ret);

  ret = strcmp(str2, str1);		//str2을 str1로 비교

  printf("/%s/ < /%s/ : %d\r\n", str2, str1, ret);

  ret = strcmp(str2, str3);		//str2을 str3로 비교

  printf("/%s/ == /%s/ : %d\r\n", str2, str3, ret);

  return 0;
}

 

실행 결과

 

 

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

int main(){
  char str1[20] = "HELLO WORLD!!";
  char str2[20] = "HELLO WORLD!!!!!";
  int ret = 0;

  ret = strcmp(str2, str1);		//str2에서 str1을 비교

  printf("/%s/ > /%s/ : %d\r\n", str2, str1, ret);

  ret = strcmp(str1, str2);		//str1에서 str2을 비교

  printf("/%s/ < /%s/ : %d\r\n", str1, str2, ret);

  return 0;
}

 

실행 결과

 

다른 string.h 파일의 함수에 대해 알고 싶으시다면 String.h 함수 파헤치기!!

 

C언어 라이브러리 - String.h 헤더 파일 분석하기(String.h 함수 모음, C언어 래퍼런스)

c언어를 사용하시거나 해보셨던 분들은 대부분 memcpy, memset 함수를 사용해보셨을 텐데요. 해당 함수를 사용하기 위해서는 String.h 파일을 포함시켜줬던 기억이 나실겁니다. 요렇게요 #include #include

idsn.tistory.com

 

반응형