名前空間
変種
操作

strndup

提供: cppreference.com
< c‎ | experimental‎ | dynamic
ヘッダ <string.h> で定義
char *strndup(const char *str, size_t size);
(dynamic memory TR)

str の指す文字列から最大 size バイトのコピーを保持するヌル終端バイト文字列を指すポインタを返します。 先頭 size バイト内でヌル終端に遭遇しなかった場合、複製後の文字列にヌル終端が追加されます。

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

エラーが発生した場合は、ヌルポインタが返され、 errno が設定されるかもしれません。

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

目次

[編集] 引数

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

[編集] 戻り値

新たに確保された文字列を指すポインタ、またはエラーが発生した場合はヌルポインタ。

[編集] ノート

この関数は POSIX の strndup と同一です。 ただし、 POSIX 版はエラーの場合に 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)
文字列のコピーを確保します
(関数) [edit]
文字列から別の文字列へ文字を一定量コピーします
(関数) [edit]
メモリを確保します
(関数) [edit]