strndup
来自cppreference.com
在标头 <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 :无尾随 '\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) |
分配字符串的副本 (函数) |
(C11) |
复制一个字符串给另一个 (函数) |
分配内存 (函数) | |
归还之前分配的内存 (函数) |