Namespaces
Variants

strndup

From cppreference.net
< c ‎ | string ‎ | byte
定義先ヘッダ <string.h>
char * strndup ( const char * src, size_t size ) ;
(C23以降)

src が指す文字列から最大で size バイトのコピーを含む、ヌル終端バイト文字列へのポインタを返します。新しい文字列のための領域は 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: 末尾に '\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)
文字列のコピーを割り当てる
(関数)
文字列を別の文字列にコピーする
(関数)
メモリを割り当てる
(関数)
以前に割り当てられたメモリを解放する
(関数)