C 参考手册

定义于头文件 <string.h>
char *strndup(const char *str, size_t size);

返回指向空终止字符串的指针,该字符串含有 str 所指向字符串的至多 size 字节的副本。若在其首 size 字节中遇到空终止符,则将它添加到复制的字符串中。

必须传递返回指针给 free ,以避免内存泄漏。

若发生错误,则返回空指针,并可能设置 errno

同所有来自动态内存 TR 的函数, strndup 仅若实现定义了 __STDC_ALLOC_LIB__ 且用户在包含 string.h 前定义 __STDC_WANT_LIB_EXT2__ 为整数常量 1 才保证可用。

参数

str - 指向要复制的空终止字符串的指针
size - str 复制的最大字节数

返回值

指向新分配字符串的指针,若错误发生则为空指针。

注意

此函数等同于 POSIX strndup ,除了允许但不要求它在错误时设置 errno

示例

#ifdef __STDC_ALLOC_LIB__
#define __STDC_WANT_LIB_EXT2__ 1
#else
#define _POSIX_C_SOURCE 200809L
#endif
 
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    const char *s1 = "String";
    char *s2 = strndup(s1, 2);
    printf("strndup(\"String\", 2) == %s\n", s2);
    free(s2);
}

输出:

strndup("String", 2) == St

参阅

(动态内存 TR)
分配字符串的副本
(函数)
从一个字符串复制一定数量的字符到另一个
(函数)
分配内存
(函数)