본문 바로가기
C

문자열 처리 함수 사용법: strcpy, strncpy, strncpy_s, strcmp, strlen

by 꼬맹님 2025. 4. 28.
반응형

C언어에서 문자열 처리 함수는 코드 작성 시 필수적으로 사용되는 강력한 도구입니다.

 

이번 글에서는 strcpy, strcmp, strlen의 사용법과 그 활용 사례를 설명하고, 유용한 팁을 함께 공유하겠습니다.

 

1. strcpy: 문자열 복사 함수

strcpy는 한 문자열을 다른 문자열로 복사할 때 사용됩니다.

구문

c
char *strcpy(char *destination, const char *source);
  • destination: 복사된 문자열이 저장될 대상
  • source: 복사될 원본 문자열

사용 예제

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

int main() {
    char source[] = "Hello, World!";
    char destination[50];

    strcpy(destination, source);

    printf("복사된 문자열: %s\n", destination);
    return 0;
}

유용한 팁

  • 버퍼 오버플로우 주의: destination 배열의 크기가 충분하지 않으면 프로그램이 충돌할 수 있습니다. 항상 적절한 크기를 확인하세요.
  • 대체 함수: 안전한 함수인 strncpy를 고려해 보세요.

2. strncpy: 문자열 복사 (보안 강화)

strncpy는 strcpy와 유사하게 문자열을 복사하는 함수지만, 복사할 최대 문자 수를 제한할 수 있어 보다 안전한 방식으로 사용할 수 있습니다.

구문

c
char *strncpy(char *destination, const char *source, size_t num);
  • destination: 복사된 문자열이 저장될 배열
  • source: 복사할 원본 문자열
  • num: 최대 복사 문자 수

특징

  • source 문자열의 길이가 num보다 작으면 복사가 완료된 후 널 종료 문자(\0)가 추가됩니다.
  • 복사된 문자열이 num만큼 복사되더라도 널 종료 문자(\0)가 포함되지 않을 수 있으므로 이에 대한 추가 처리 필요.

사용 예제

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

int main() {
    char source[] = "Hello, strncpy!";
    char destination[20];

    // 최대 10개 문자 복사
    strncpy(destination, source, 10);
    destination[10] = '\0'; // 널 종료 문자 추가

    printf("복사된 문자열: %s\n", destination);
    return 0;
}

유용한 팁

  1. 안전한 복사:
    • 복사된 문자열이 항상 널 종료되도록 추가 작업을 권장합니다.
    • 널 종료 문자를 직접 추가하는 습관을 들이면 버그를 방지할 수 있습니다.
  2. 대체 함수:
    • 더욱 안전한 복사를 위해 strncpy_s를 고려해 볼 수 있습니다(표준 C 라이브러리 확장 기능).

strncpy_s는 기존 strncpy보다 더 안전한 문자열 복사 함수로, 보안과 안정성을 강화한 기능을 제공합니다. 이 함수는 잘못된 입력이나 버퍼 크기 초과를 미리 방지하기 위해 설계되었습니다.

3. strncpy_s: 문자열 복사 (보안 강화)

구문

c
errno_t strncpy_s(char *destination, size_t size, const char *source, size_t num);
  • destination: 복사된 문자열을 저장할 대상
  • size: destination 배열의 전체 크기
  • source: 복사될 원본 문자열
  • num: 복사할 최대 문자 수

특징

  1. 버퍼 오버플로우 방지:
    • destination의 크기(size)를 지정하므로, 복사 중 버퍼 초과가 발생하지 않습니다.
  2. 안전한 사용:
    • 잘못된 입력 값(예: NULL 포인터)이 전달되면 오류를 반환합니다.

사용 예제

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

int main() {
    char source[] = "Hello, strncpy_s!";
    char destination[20];

    // 최대 10개의 문자 복사
    if (strncpy_s(destination, sizeof(destination), source, 10) == 0) {
        printf("복사된 문자열: %s\n", destination);
    } else {
        printf("문자열 복사에 실패했습니다.\n");
    }
    return 0;
}

주요 점검 사항

  • size와 num은 반드시 올바르게 설정해야 합니다.
    • num > size인 경우, 복사가 수행되지 않고 오류가 반환됩니다.
  • 반환 값으로 성공(0) 또는 실패 코드(비 0)를 확인하세요.

4. strcmp: 문자열 비교 함수

strcmp는 두 문자열을 비교하여 동일한지, 또는 어느 쪽이 더 큰지를 판별합니다.

구문

c
int strcmp(const char *str1, const char *str2);
  • 반환값:
    • 0: 두 문자열이 동일함.
    • 음수: str1이 str2보다 작음.
    • 양수: str1이 str2보다 큼.

사용 예제

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

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

    if (strcmp(str1, str2) == 0) {
        printf("두 문자열은 동일합니다.\n");
    } else {
        printf("두 문자열은 다릅니다.\n");
    }
    return 0;
}

유용한 팁

  • 대소문자를 구분하므로, 대소문자를 무시하고 비교하려면 strcasecmp(대체 함수)를 사용할 수 있습니다.

5. strlen: 문자열 길이 계산 함수

strlen은 문자열의 길이를 계산합니다.

구문

c
size_t strlen(const char *str);
  • 반환값: 문자열의 길이 (널 종료 문자 \0는 제외)

사용 예제

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

int main() {
    char str[] = "Programming";

    printf("문자열 길이: %zu\n", strlen(str));
    return 0;
}

유용한 팁

  • 반복문에서 문자열 길이를 여러 번 호출하지 말고, 한 번 저장해두고 사용하는 것이 효율적입니다.
반응형

'C' 카테고리의 다른 글

C 언어의 for문, while문, switch문 완벽 정리  (0) 2025.04.24
C언어 qsort 함수  (0) 2025.04.14
C언어 >>와 << 연산자 쉽게 이해하기  (0) 2025.04.11