[C]strcmp & strncmp


strcmp함수는 두문자열을 비교하는 함수입니다.
strncmp함수는 두문자열을 원하는 길이까지만 비교하는 함수입니다.


1️⃣ 함수원형

< strcmp >

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

< strncmp >

int strncmp(const char* str1, const char* str2, size_t len)

2️⃣ 헤더파일, 반환값

  • 반환값:

    조건반환값(size_t)
    str1 > str21 or 양수
    str1 == str20
    str1 < str2-1 or 음수
  • 헤더파일: <string.h>


3️⃣ 함수구현

< strcmp >

int strcmp(const char* str1, const char* str2)
{
    while (*str1 != '\0' && *str1 == *str2)
    {
        str1++;
        str2++;
    }
    return (*str1 - *str2);
}

< strncmp >

int strncmp(const char* str1, const char* str2, size_t len)
{
    size_t i;

    i = 1;
    while (*str1 != '\0' && *str1 == *str2 && i < len)
    {
        str1++;
        str2++;
        i++;
    }
    return (*str1 - *str2);
}

4️⃣ 특징 & 주의사항

  • 자료형이 size_t인 len의 값이 음수가 되면 버퍼오버플로우(size_t는 unsigned형으로 선언되어 있기 때문)가 일어납니다. 컴파일러에 따라서 경고메시지를 출력해주기도 합니다. 하지만 대부분의 컴파일러에서 오버플로우난 상태로 함수가 실행됩니다. 결국 음수값의 len값을 가진 strncmp함수는 strcmp함수와 같게 됩니다.




© 2021.02. by kirim

Powered by kkrim