C 언어 strcmp 함수 완전 해설 | 문자열 비교 기본부터 응용까지

C 언어에서 문자열을 비교할 때, 무엇을 사용합니까?strcmp은 두 문자열이 같은지 확인하기 위한 함수로, 마치 프로그램에 “이 두 개, 같은가?”라고 질문하는 것과 같습니다. 물론, 프로그램은 고양이와 개 중 어느 쪽이 더 귀여운지 판단할 수 없지만, 최소한 “HELLO”와 “hello”의 차이 정도는 구별할 수 있습니다. 이 기사에서는 그런 strcmp의 작동 원리와 사용 방법, 그리고 흔히 실수하기 쉬운 포인트에 대해 설명합니다.

1. strcmp 함수란?

strcmp 함수는 두 문자열을 한 문자씩 비교하고, 그 결과를 정수값으로 반환하는 함수입니다. 이 함수는 다음과 같이 동작합니다:
  • 0: 문자열이 일치하는 경우
  • 양수: 첫 번째 문자열이 사전 순으로 뒤에 있는 경우
  • 음수: 첫 번째 문자열이 사전 순으로 앞에 있는 경우
이 함수는 문자열이 모두 같은지 확인할 뿐만 아니라, 어느 것이 먼저인지 판단할 수도 있습니다. 프로그램에서는 다음과 같이 간단히 사용할 수 있습니다:
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello";
    char str2[] = "World";

    int result = strcmp(str1, str2);
    printf("strcmp 결과: %dn", result);
    return 0;
}
위 코드는 “Hello”와 “World”를 비교하고 그 결과를 표시합니다. 중요한 점은 strcmp대소문자를 구분하기 때문에, “HELLO”와 “hello”는 서로 다른 문자열로 판단된다는 것입니다.

2. strcmp 함수의 동작 원리

strcmp의 동작은 단순하면서도 강력합니다. 두 문자열을 첫 문자부터 하나씩 비교하고, 다른 문자가 나타난 시점에 그 차이를 반환합니다. 이 메커은 알파벳 순서 비교에도 적용되며, 예를 들어 “apple”과 “banana”를 비교할 경우, strcmp은 “a”와 “b”를 먼저 비교하고 음수를 반환합니다. 다음은 strcmp의 작동 방식을 더 이해하기 위한 프로그램 예제입니다:
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";

    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("문자열이 일치합니다.n");
    } else if (result < 0) {
        printf("str1은 str2보다 앞에 있습니다.n");
    } else {
        printf(" str2보다 뒤에 있습니다.n");
    }

    return 0;
}
이 코드에서는 “apple”과 “banana”를 비교합니다. 결과적으로 strcmp은 “apple”이 사전 순으로 “banana”보다 앞에 있음을 알려줍니다. 이를 통해 문자열을 사전 순으로 정렬할 때 등에도 유용합니다.

3. strcmp 함수 사용 예시

1. 사용자 입력 확인

strcmp은 사용자가 입력한 데이터와 기존 데이터를 비교할 때 유용합니다. 예를 들어, 비밀번호 일치 확인에 사용할 수 있습니다.
#include <stdio.h>
#include <string.h>

int main() {
    char password[] = "secret";
    char input[256];

    printf("비밀번호를 입력하세요: ");
    scanf("%s", input);

    if (strcmp(password, input) == 0) {
        printf("비밀번호가 일치했습니다.n");
    } else {
        printf("비밀번호가 틀렸습니다.n");
    }

    return 0;
}
이 프로그램은 입력된 비밀번호와 올바른 비밀번호를 strcmp으로 비교합니다.

2. 사전 순 정렬

사전 순으로 문자열을 정렬할 때도 strcmp은 편리합니다. 여러 단어를 정렬할 때 strcmp을 사용하여 어느 단어가 앞에 와야 하는지 판단할 수 있습니다.

4. strcmp 함수의 대체 방법

strcmp은 매우 편리하지만, 용도에 따라 다른 함수도 검토해야 할 경우가 있습니다.

strncmp: 부분 문자열 비교

strncmp은 문자열의 일부만 비교하고 싶을 때 사용합니다. 예를 들어, 문자열의 처음 3글자만 비교하는 경우에 사용합니다.
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "apricot";

    if (strncmp(str1, str2, 3) == 0) {
        printf("처음 3문자가 일치합니다.n");
    } else {
        printf("처음 3문자가 일치하지 않습니다.n");
    }

    return 0;
}

memcmp: 메모리 비교

memcmp은 문자열이 아니라 메모리 전체를 비교하기 위한 함수입니다. 바이너리 데이터 비교가 필요할 때 유용합니다.

5. 흔히 발생하는 실수

1. 대소문자 차이를 고려하지 않음

strcmp은 대소문자를 구분합니다. 예를 들어, “HELLO”와 “hello”는 서로 다른 것으로 취급됩니다. 대소문자에 의존하지 않는 비교가 필요할 경우, strcasecmp 사용을 고려해 보세요.

2. NULL 포인터 비교

strcmp으로 NULL 포인터를 비교하면 크래시의 원인이 됩니다. 비교하는 문자열이 적절히 초기화되어 있는지 확인하는 것이 중요합니다.

요약

strcmp는 C 언어에서 매우 중요한 함수이며, 문자열 비교를 쉽게 할 수 있습니다. 비밀번호 확인이나 문자열 정렬 등, 실제 프로그램에서의 사용 예시를 보여주면서 설명했습니다. 프로그램 내에서 문자열 조작에 있어, 이 함수의 편리함을 꼭 체험해 보세요.
侍エンジニア塾