Namespaces
Variants

strndup

From cppreference.net
< c ‎ | string ‎ | byte
헤더 파일에 정의됨 <string.h>
char * strndup ( const char * src, size_t size ) ;
(C23 이후)

최대 size 바이트까지 src 가 가리키는 문자열로부터 복사된 내용을 담고 있는 널 종료 바이트 문자열에 대한 포인터를 반환합니다. 새로운 문자열을 위한 공간은 마치 malloc 이 호출된 것처럼 할당됩니다. 첫 size 바이트 내에서 널 종결자를 찾지 못한 경우, 복제된 문자열 끝에 추가됩니다.

반환된 포인터는 메모리 누수를 피하기 위해 free 에 전달되어야 합니다.

오류가 발생하면 널 포인터가 반환되고 errno 가 설정될 수 있습니다.

목차

매개변수

src - 복제할 널 종료 바이트 문자열에 대한 포인터
size - src 에서 복사할 최대 바이트 수

반환값

새로 할당된 문자열에 대한 포인터, 또는 오류 발생 시 널 포인터.

참고 사항

이 함수는 POSIX strndup 과 동일하지만, 오류 발생 시 errno 를 설정할 수 있으나 필수는 아닙니다.

예제

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const size_t n = 3;
    const char *src = "Replica";
    char *dup = strndup(src, n);
    printf("strndup(\"%s\", %lu) == \"%s\"\n", src, n, dup);
    free(dup);
    src = "Hi";
    dup = strndup(src, n);
    printf("strndup(\"%s\", %lu) == \"%s\"\n", src, n, dup);
    free(dup);
    const char arr[] = {'A','B','C','D'}; // NB: no trailing '\0'
    dup = strndup(arr, n);
    printf("strndup({'A','B','C','D'}, %lu) == \"%s\"\n", n, dup);
    free(dup);
}

출력:

strndup("Replica", 3) == "Rep"
strndup("Hi", 3) == "Hi"
strndup({'A','B','C','D'}, 3) == "ABC"

참고 항목

(C23)
문자열의 복사본을 할당함
(함수)
문자열을 다른 문자열로 복사함
(함수)
메모리를 할당함
(함수)
이전에 할당된 메모리를 해제함
(함수)