strndup

来自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 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)
分配字符串的副本
(函数)
复制一个字符串给另一个
(函数)
分配内存
(函数)
归还之前分配的内存
(函数)