strndup
來自 cppreference.com
定義於標頭檔案 <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) |
分配一個字串的副本 (函式) |
(C11) |
將一個字串複製到另一個字串 (函式) |
分配記憶體 (函式) | |
釋放先前分配的記憶體 (函式) |