命名空间
变体
操作

strndup

来自 cppreference.com
< c‎ | experimental‎ | dynamic
在头文件 <string.h> 中定义
char *strndup( const char *str, size_t size );
(动态内存 TR)

返回指向一个空终止的字节字符串的指针,该字符串包含最多 size 个字节从 str 指向的字符串中复制的字节。如果在第一个 size 个字节中没有遇到空终止符,则将其添加到复制的字符串中。

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

如果发生错误,则返回一个空指针,并且可能设置 errno

与 Dynamic Memory 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)
分配字符串的副本
(函数) [编辑]
从一个字符串复制一定数量的字符到另一个字符串
(函数) [编辑]
分配内存
(函数) [编辑]