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: no trailing '\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) |
将一个字符串复制到另一个字符串 (函数) |
分配内存 (函数) | |
释放之前分配的内存 (函数) |