我应该在 Mac OS X 上使用哪个 libc strcpy/strlcpy/strncpy?

Which libc strcpy/strlcpy/strncpy should I use on Mac OS X?

我没有 OS X 开发环境。我没有 OS X 头文件。我不得不猜测我的一些图书馆电话。在这一点上,我想使用的东西之一是 strlcpy().

  1. strlcpy() 是 OS X 上 libc 的一部分吗?

  2. 如果是,声明是什么,或者网络上哪里有头文件的副本?

  3. 如果不是,它是 OS X 上系统库的一部分吗?

  4. 如果没有,是否有另一个 "safe" strcpy() 在 OS X 上可用?

摘自 man strlcpy Mac 运行 macOS High Sierra 10.13.3。

STRLCPY(3) — BSD Library Functions Manual — STRLCPY(3)

NAME

strlcpy, strlcat -- size-bounded string copying and concatenation

LIBRARY

Standard C Library (libc, -lc)

SYNOPSIS

#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);

DESCRIPTION

The strlcpy() and strlcat() functions copy and concatenate strings with the same input parameters and output result as snprintf(3). They are designed to be safer, more consistent, and less error prone replacements for the easily misused functions strncpy(3) and strncat(3).

strlcpy() and strlcat() take the full size of the destination buffer and guarantee NUL-termination if there is room. Note that room for the NUL should be included in dstsize.

strlcpy() copies up to dstsize - 1 characters from the string src to dst, NUL-terminating the result if dstsize is not 0.

strlcat() appends string src to the end of dst. It will append at most dstsize - strlen(dst) - 1 characters. It will then NUL-terminate, unless dstsize is 0 or the original dst string was longer than dstsize (in practice this should not happen as it means that either dstsize is incorrect or that dst is not a proper string).

If the src and dst strings overlap, the behavior is undefined.