Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++에서 strncmp()와 strcmp()의 차이점 총정리

C 언어에서 문자열을 비교할 때 가장 많이 사용되는 함수는 <string.h> 헤더 파일에 정의된 strcmp()strncmp()입니다. 두 함수는 이름이 비슷해 혼동하기 쉽지만, 비교 범위를 제어할 수 있는지 여부라는 중요한 차이점이 있습니다. 이 글에서는 각 함수의 동작 원리, 문법, 그리고 실제 예제를 통해 두 함수의 차이를 명확히 살펴보겠습니다.

strncmp() 함수란?

strncmp() 함수는 왼쪽 문자열(leftString)과 오른쪽 문자열(rightString)을 사용자가 지정한 개수(number)만큼만 비교하는 함수입니다. 기본적인 동작 방식은 strcmp()와 동일하며, 반환값 규칙도 같습니다.

  • 비교 중인 위치에서 왼쪽 문자열의 문자가 오른쪽 문자열의 문자보다 ASCII 값이 크면 → 0보다 큰 값을 반환합니다.
  • 비교 중인 위치에서 왼쪽 문자열의 문자가 오른쪽 문자열의 문자보다 ASCII 값이 작으면 → 0보다 작은 값을 반환합니다.
  • 지정한 개수만큼 비교했을 때 모든 문자가 같으면 → 0을 반환합니다.

문법

int strncmp(const char *leftString, const char *rightString, size_t number);
  • leftString − 오른쪽 문자열과 비교할 첫 번째 문자열입니다.
  • rightString − 첫 번째 문자열과 비교할 두 번째 문자열입니다.
  • number − 비교할 최대 문자 수입니다.

예제

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

int main() {
    char str1[] = "blank";
    char str2[] = "Hello World!";
    int result = strncmp(str1, str2, 1);

    if (result == 0)
    printf("Strings are equal");
    else
    printf("Strings are unequal");

    printf("\nValue returned by strncmp() is: %d", result);
    return 0;
}

위 예제에서는 세 번째 인자로 1을 전달했기 때문에 두 문자열의 첫 번째 문자('b'와 'H')만 비교합니다. 'b'(ASCII 98)가 'H'(ASCII 72)보다 크므로 두 값의 차이인 26이 반환됩니다.

실행 결과

Strings are unequal
Value returned by strncmp() is: 26

strcmp() 함수란?

strcmp() 함수는 <string.h> 헤더 파일에 선언된 내장(built-in) 라이브러리 함수로, 두 문자열 인자를 비교하는 데 사용됩니다. 이 함수는 문자열을 사전순(lexicographical order)으로 비교하며, 즉 두 문자열을 한 문자씩 순서대로 비교합니다.

비교는 두 문자열의 첫 번째 문자부터 시작되며, 아래 조건 중 하나가 만족될 때까지 계속됩니다.

  • 두 문자가 서로 다른 경우
  • NULL 종료 문자('\0')를 만난 경우

첫 번째 문자가 서로 같다면 두 번째 문자를 확인하고, 이 과정은 NULL 문자를 만나거나 서로 다른 문자가 나타날 때까지 반복됩니다.

  • 두 문자열이 완전히 동일하면 → 0을 반환합니다.
  • 왼쪽 문자열의 문자가 더 크면 → 0보다 큰 값을 반환합니다.
  • 왼쪽 문자열의 문자가 더 작으면 → 0보다 작은 값을 반환합니다.

문법

int strcmp(const char *leftString, const char *rightString);
  • leftString − 오른쪽 문자열과 비교할 첫 번째 문자열입니다.
  • rightString − 첫 번째 문자열과 비교할 두 번째 문자열입니다.

예제

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

int main() {
    char str1[] = "hello World!";
    char str2[] = "Hello World!";
    int result = strcmp(str1, str2);

    if (result == 0)
    printf("Strings are equal");
    else
    printf("Strings are unequal");

    printf("\nValue returned by strcmp() is: %d", result);
    return 0;
}

위 예제에서 두 문자열의 첫 번째 문자는 각각 'h'(ASCII 104)와 'H'(ASCII 72)입니다. 소문자 'h'가 대문자 'H'보다 ASCII 값이 크므로 두 값의 차이인 32가 반환됩니다.

실행 결과

Strings are unequal
Value returned by strcmp() is: 32

strncmp()와 strcmp()의 핵심 차이점

구분strcmp()strncmp()
비교 범위NULL 문자를 만날 때까지 전체 문자열 비교지정한 개수(number)만큼만 비교 후 중단
매개변수 수2개 (두 문자열)3개 (두 문자열 + 비교할 문자 수)
안전성버퍼 경계를 넘어 비교할 위험 있음비교 범위를 제한하므로 상대적으로 안전
반환값동일 (음수 / 0 / 양수)

정리하면, strcmp()는 문자열 전체를 NULL 문자를 만날 때까지 끝까지 비교하는 반면, strncmp()는 지정된 문자 수만큼만 비교하고 중단합니다. 따라서 문자열의 일부분만 비교하거나 버퍼 크기를 고려해 안전하게 비교해야 하는 상황이라면 strncmp()를 사용하는 것이 좋습니다.