C언어/string.h

[C언어] strcmp 함수 (문자열 비교 함수)

아무일도없었다 2022. 9. 13. 14:33

사용범위

Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수

기능

C언어 표준 함수로 문자열을 비교할때 사용한다.

헤더

#include <string.h>

※ strcmp 함수 사용시 string.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※


함수

int strcmp(const char* str1, const char* str2);

파라미터

  • const char* str1
    • 비교할 첫번째 문자열을 입력한다.
    • NULL 문자로 종료되는 문자열이 들어가는것이 좋다.
  • const char* str2
    • 비교할 두번째 문자열을 입력한다.
    • NULL 문자로 종료되는 문자열이 들어가는것이 좋다.

반환값 (return)

-1 : string1 이 string2 보다 작은 경우 ( str1 < str2
 0 : string1 과 string2 가 동일한 경우 ( str1 == str2 )
 1 : string1 이 string2 보다 큰 경우 ( str1 > str2 )

0 인 경우 두 문자열이 동일하다.
0 이 아닌 경우 두 문자열은 서로 다르다.

 


잡학지식

strcmp 함수는 비교하는 문자열의 끝을 NULL 문자로 확인하기 때문에 앞에 몇글자만 비교하는 기능을 사용하기에 적절하지 않다.

 

따라서 문자열의 특정 부분만 비교를 하는 경우에는 strncmp 를 사용하는것을 권장한다.

 

만약 NULL 문자를 포함해서 데이터를 비교해야 하는 상황에서는 memcmp 함수를 사용하는것을 권장한다.


 

<소스 코드>

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

int main() {
    char buffer1[8] = {0,};
    char buffer2[8] = {0,};
    char buffer3[8] = {0,};
    char buffer4[8] = {0,};
    int ret;

    strcpy(buffer1, "abcd");
    strcpy(buffer2, "abc");
    strcpy(buffer3, "abc");
    strcpy(buffer4, "ABC");

    // abcd, abc
    ret = strcmp(buffer1, buffer2);
    printf("strcmp(abcd, abc) = %d\n", ret);

    // abc, abcd
    ret = strcmp(buffer2, buffer1);
    printf("strcmp(abc, abcd) = %d\n", ret);

    // abc, abc
    ret = strcmp(buffer2, buffer3);
    printf("strcmp(abc, abc) = %d\n", ret);

    // abc, ABC
    ret = strcmp(buffer3, buffer4);
    printf("strcmp(abc, ABC) = %d (a=%d, A=%d)\n", ret, 'a', 'A');

    return 0;
}

 

※ 실행 결과

strcmp(abcd, abc) = 1
strcmp(abc, abcd) = -1
strcmp(abc, abc) = 0
strcmp(abc, ABC) = 1 (a=97, A=65)

 

abc 와 ABC 를 비교했을때 strcmp 의 결과값이 1이 나온 이유는 ASCII 코드 기준으로 비교해보면 a 가 A 보다 더 큰 값이기 때문이다. (a = 97, A = 65) 
반응형