命名空间
变体
操作

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: 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)
分配一个字符串的副本
(函数) [编辑]
将一个字符串复制到另一个字符串
(函数) [编辑]
分配内存
(函数) [编辑]
释放之前分配的内存
(函数) [编辑]