strndup
From cppreference.net
|
定义于头文件
<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'}; // 注意:没有结尾的'\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)
|
将一个字符串复制到另一个字符串
(函数) |
|
分配内存
(函数) |
|
|
释放先前分配的内存
(函数) |