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

C 언어 strncmp() 함수란? 문자열 비교 원리와 예제 총정리

C 표준 라이브러리 함수 int strncmp(const char *str1, const char *str2, size_t n)는 두 문자열 str1str2의 처음 n바이트까지만 비교하는 함수입니다.

C 언어에서 문자(character)들의 배열을 문자열(string)이라고 부릅니다.

문자열 선언

문자열 배열을 선언하는 기본 문법은 다음과 같습니다.

char stringname [size];

예를 들어 char string[50];처럼 선언하면 길이 50자를 저장할 수 있는 문자열이 만들어집니다.

문자열 초기화

문자열을 초기화하는 방법에는 두 가지가 있습니다.

1. 단일 문자 상수로 초기화

char string[10] = { 'H', 'e', 'l', 'l', 'o', '\0' };

2. 문자열 상수로 초기화

char string[10] = "Hello";

접근(Accessing) — 제어 문자열 "%s"를 사용하면 문자열 끝을 알리는 널 문자 '\0'을 만날 때까지 문자열 전체를 읽거나 출력할 수 있습니다.

strncmp() 함수란?

strncmp() 함수는 두 문자열의 처음 'n'개 문자만 비교할 때 사용합니다. 전체 문자열이 아닌 지정한 길이만큼만 비교하기 때문에, 부분 문자열 비교나 접두사 검사에 유용합니다.

반환값

  • 0: 두 문자열이 같은 경우
  • 양수: 첫 번째 문자열이 더 큰 경우
  • 음수: 첫 번째 문자열이 더 작은 경우

문법

strncmp ( string1, string2, n )

간단한 예제

char a[10] = "the";
char b[10] = "there";
strncmp(a, b, 3);

위 코드에서는 앞 3글자("the")만 비교하므로 두 문자열은 서로 같다고 판단되며, 반환값은 0이 됩니다.

실전 예제 프로그램

다음은 strncmp 라이브러리 함수를 이용해 두 문자열의 특정 구간을 비교하는 C 프로그램입니다.

#include<stdio.h>
#include<string.h>
void main(){
    //두 개의 문자열 선언//
    char string1[25],string2[25];
    int value;
    //문자열 1과 문자열 2 입력 받기//
    printf("Enter String 1: ");
    gets(string1);
    printf("Enter String 2: ");
    gets(string2);
    //라이브러리 함수로 비교//
    value = strncmp(string1,string2,4);
    //조건문으로 결과 출력//
    if(value==0){
        printf("%s is same as %s",string1,string2);
    }
    else if(value>0){
        printf("%s is greater than %s",string1,string2);
    } else {
        printf("%s is less than %s",string1,string2);
    }
}

참고: gets() 함수는 버퍼 오버플로우 위험 때문에 현재 C 표준에서 제거된 함수입니다. 실무에서는 안전한 fgets() 사용을 권장합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 결과를 확인할 수 있습니다.

Run 1:
Enter String 1: Welcome
Enter String 2: TO my World
Welcome is greater than TO my World
Run 2:
Enter String 1: welcome
Enter String 2: welcome
welcome is same as welcome

첫 번째 실행에서는 앞 4글자('W' vs 'T')를 비교했을 때 'W'의 ASCII 값이 더 크므로 첫 번째 문자열이 크다고 판단됩니다. 두 번째 실행에서는 두 문자열이 완전히 같으므로 0을 반환해 "같다"는 결과가 출력됩니다.