C 표준 라이브러리 함수 int strncmp(const char *str1, const char *str2, size_t n)는 두 문자열 str1과 str2의 처음 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을 반환해 "같다"는 결과가 출력됩니다.