strndup
From cppreference.com
| ヘッダー <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) |
文字列のコピーを割り当てる (関数) |
| (C11) |
ある文字列を別の文字列にコピーする (関数) |
| メモリを割り当てる (関数) | |
| 以前に割り当てられたメモリを解放する (関数) |