Namespaces
Variants

strndup

From cppreference.net
定义于头文件 <string.h>
char * strndup ( const char * str, size_t size ) ;
(动态内存 TR)

返回指向以空字符结尾的字节字符串的指针,该字符串包含从 str 指向的字符串中复制的至多 size 个字节。若在前 size 个字节中未遇到空终止符,则会在复制的字符串末尾添加空终止符。

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

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

与动态内存技术报告中的所有函数一样,只有当实现定义了 __STDC_ALLOC_LIB__ ,且用户在包含 string.h 头文件之前将 __STDC_WANT_LIB_EXT2__ 定义为整型常量 1 时,才保证 strndup 函数可用。

目录

参数

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)
分配字符串的副本
(函数)
将指定数量的字符从一个字符串复制到另一个字符串
(函数)
分配内存
(函数)