Namespaces
Variants

strndup

From cppreference.net
ヘッダーで定義 <string.h>
char * strndup ( const char * str, size_t size ) ;
(動的メモリ TR)

str が指す文字列から最大で size バイトのコピーを含む、null終端バイト文字列へのポインタを返します。 最初の size バイト内にnull終端文字が見つからない場合、複製された文字列に追加されます。

返されたポインタはメモリリークを避けるために free に渡されなければなりません。

エラーが発生した場合、ヌルポインタが返され、 errno が設定される可能性があります。

Dynamic Memory TRのすべての関数と同様に、 strndup は、実装によって __STDC_ALLOC_LIB__ が定義されており、かつユーザーが __STDC_WANT_LIB_EXT2__ を整数定数 1 に設定した場合にのみ利用可能であることが保証されています。 string.h をインクルードする前に設定する必要があります。

目次

パラメータ

str - 複製するヌル終端バイト文字列へのポインタ
size - str からコピーする最大バイト数

戻り値

新しく割り当てられた文字列へのポインタ、またはエラーが発生した場合はヌルポインタ。

注記

この関数は、 POSIX strndup と同一ですが、エラー発生時に errno を設定することが許可されている(必須ではない)点が異なります。

#ifdef __STDC_ALLOC_LIB__
#define __STDC_WANT_LIB_EXT2__ 1
#else
#define _POSIX_C_SOURCE 200809L
#endif
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const char *s1 = "String";
    char *s2 = strndup(s1, 2);
    printf("strndup(\"String\", 2) == %s\n", s2);
    free(s2);
}

出力:

strndup("String", 2) == St

関連項目

(dynamic memory TR)
文字列のコピーを割り当てる
(関数)
ある文字列から別の文字列へ指定された文字数をコピーする
(関数)
メモリを割り当てる
(関数)