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()로 해제하는 습관을 들이는 것이 좋습니다.