Namespaces
Variants

strndup

From cppreference.net
< 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'}; // 注意:没有结尾的'\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)
分配字符串的副本
(函数)
将一个字符串复制到另一个字符串
(函数)
分配内存
(函数)
释放先前分配的内存
(函数)