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