名前空間
変種
操作

strndup

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

srcで指定された文字列から最大sizeバイトをコピーした、ヌル終端のバイト文字列へのポインタを返します。新しい文字列のための領域は、mallocが呼び出されたかのように取得されます。最初のsizeバイト内にヌル終端文字が見つからない場合は、コピーされた文字列の末尾に追加されます。

メモリリークを避けるために、返されたポインタはfreeに渡す必要があります。

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

目次

[編集] パラメータ

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

[編集] 戻り値

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

[編集] 注記

この関数は、POSIXのstrdupと同一ですが、エラー時に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)
文字列のコピーを割り当てる
(関数) [編集]
ある文字列を別の文字列にコピーする
(関数) [編集]
メモリを割り当てる
(関数) [編集]
以前に割り当てられたメモリを解放する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)