名稱空間
變體
操作

strndup

來自 cppreference.com
< c‎ | string‎ | byte
定義於標頭檔案 <string.h>
char *strndup( const char *src, size_t size );
(自 C23 起)

返回一個指向以空字元結尾的位元組字串的指標,該字串包含最多 size 個位元組的副本,這些位元組來自 src 指向的字串。新字串的空間是透過呼叫 malloc 獲得的。如果在前 size 個位元組中沒有遇到空終止符,它將被附加到複製的字串中。

返回的指標必須傳遞給 free 以避免記憶體洩漏。

如果發生錯誤,將返回空指標,並且可能會設定 errno

目錄

[編輯] 引數

src - 指向要複製的以空字元結尾的位元組字串的指標
size - src 複製的最大位元組數

[編輯] 返回值

指向新分配字串的指標,如果發生錯誤則為 null 指標。

[編輯] 注意

此函式與 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: 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)
分配一個字串的副本
(函式) [編輯]
將一個字串複製到另一個字串
(函式) [編輯]
分配記憶體
(函式) [編輯]
釋放先前分配的記憶體
(函式) [編輯]