我没有OS X开发环境。我没有OS X头文件。我不得不猜测我的一些图书馆电话。在这一点上,我想使用的一件事是strlcpy()
。
OS X上strlcpy()
是libc的一部分吗?
如果是这样,声明是什么,或者在头文件的网上副本?
如果不是,它是否是OS X上系统库的一部分?
如果没有,OS X上是否还有另一个“安全” strcpy()
?
最佳答案
运行MacOS High Sierra 10.13.3的Mac上的man strlcpy
摘录。
STRLCPY(3)— BSD库功能手册— STRLCPY(3)
名称
strlcpy,strlcat-大小限制的字符串复制和连接
图书馆
标准C库(libc,-lc)
概要
#include <string.h>
size_t strlcpy(char * restrict dst, const char * restrict src, size_t dstsize);
size_t strlcat(char * restrict dst, const char * restrict src, size_t dstsize);
描述
strlcpy()和strlcat()函数使用相同的输入参数复制和连接字符串,并将输出结果与snprintf(3)相同。它们的设计目的是对容易使用的函数strncpy(3)和strncat(3)进行更安全,更一致且更不易出错的替换。
strlcpy()和strlcat()占用目标缓冲区的完整大小,并在有空间的情况下保证NUL终止。请注意,dstsize中应包含NUL的空间。
strlcpy()最多将dstsize-1个字符从字符串src复制到dst,以NUL结尾
如果dstsize不为0,则返回结果。
strlcat()将字符串src附加到dst的末尾。它将最多附加dstsize-strlen(dst)
-1个字符。然后它将以NUL终止,除非dstsize为0或原始dst字符串
的时间比dstsize长(实际上这不应发生,因为这意味着dstsize是
错误或dst不是正确的字符串)。
如果src和dst字符串重叠,则行为未定义。