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

C 언어 strdup()과 strndup() 함수 완벽 정리: 문자열 복제의 모든 것

strdup() 함수란?

strdup() 함수는 문자열을 복제(duplicate)하기 위해 사용되는 C 표준 라이브러리 함수입니다. 이 함수는 인자로 전달된 문자열을 새로운 메모리 공간에 복사한 후, 널 종료(null-terminated) 바이트 문자열을 가리키는 포인터를 반환합니다.

내부적으로 malloc()을 호출해 새 문자열을 저장할 메모리를 동적으로 할당하기 때문에, 사용이 끝난 후에는 반드시 free() 함수로 메모리를 해제해야 메모리 누수를 방지할 수 있습니다.

strdup()의 구문

C 언어에서 strdup() 함수의 구문은 다음과 같습니다.

char *strdup(const char *string);
  • string : 복제할 원본 문자열을 가리키는 포인터입니다.
  • 반환값 : 복제된 문자열을 가리키는 포인터이며, 메모리 할당에 실패하면 NULL을 반환합니다.

strdup() 예제 코드

다음은 C 언어에서 strdup() 함수를 사용하는 예제입니다.

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

int main() {
    char *str = "Helloworld";
    char *result;

    result = strdup(str);
    printf("The string : %s", result);

    return 0;
}

실행 결과

The string : Helloworld

위 예제에서 strdup()은 원본 문자열 "Helloworld" 전체를 새로운 메모리에 복사하고, 그 시작 주소를 result 포인터에 반환합니다.

strndup() 함수란?

strndup() 함수는 strdup()과 유사하게 작동하지만, 한 가지 중요한 차이점이 있습니다. 이 함수는 최대 size 바이트까지만 문자열을 복제합니다. 즉, 함수에 지정된 크기만큼만 복사하며, 복사된 결과 역시 항상 널 문자(\0)로 종료되는 안전한 문자열입니다.

복사 길이를 제한할 수 있기 때문에, 원본 문자열이 예상보다 길거나 버퍼 크기를 제어해야 하는 상황에서 유용하게 활용됩니다.

strndup()의 구문

C 언어에서 strndup() 함수의 구문은 다음과 같습니다.

char *strndup(const char *string, size_t size);
  • string : 복제할 원본 문자열을 가리키는 포인터입니다.
  • size : 복제할 최대 바이트 수입니다.
  • 반환값 : 복제된 문자열을 가리키는 포인터이며, 메모리 할당에 실패하면 NULL을 반환합니다.

strndup() 예제 코드

다음은 C 언어에서 strndup() 함수를 사용하는 예제입니다.

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

int main() {
    char *str = "Helloworld";
    char *result;

    result = strndup(str, 3);
    printf("The string : %s", result);

    return 0;
}

실행 결과

The string : Hel

위 예제에서 strndup(str, 3)은 원본 문자열에서 앞의 3바이트("Hel")만 복사하고 자동으로 널 문자를 붙여 안전한 문자열을 만듭니다.

strdup()과 strndup()의 차이점 요약

구분strdup()strndup()
복제 범위문자열 전체 복제최대 size 바이트까지만 복제
메모리 할당malloc() 기반 동적 할당malloc() 기반 동적 할당
널 종료 보장항상 널 문자로 종료항상 널 문자로 종료
메모리 해제free() 필요free() 필요

두 함수 모두 동적 메모리를 사용하므로, 사용이 끝난 문자열 포인터는 반드시 free()로 해제하는 습관을 들이는 것이 좋습니다.