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

标签 c macos header-files libc

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

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

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

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

  4. 如果没有,OS X 上是否还有另一个“安全”的 strcpy() 可用?

最佳答案

摘自运行 macOS High Sierra 10.13.3 的 Mac 上的 man strlcpy

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.

关于c - 我应该在 Mac OS X 上使用哪个 libc strcpy/strlcpy/strncpy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49023864/

相关文章:

macos - 在 Docker for Mac 上,从容器中看到的主机 ip 是什么?

c++ - 为什么头文件 Head1.h 不能包含包含 Head1.h 的头文件 Head2.h?

c++ - 这些在 string 和 wstring 之间转换的函数是否应该作为仅 header 实现?

C 解析函数不起作用

python - 尝试构建基本的 python 扩展示例失败 (windows)

c++ - 为什么 sizeof(int) 与 sizeof(int*) 不同?

windows - Mac 友好的热键?

升级到 Mojave 后无法在 Mac 上编译 C 程序

c++ - G++ 编译器错误 - 此处首先需要合成方法

c - 我只是无法获得预期的输出。这超出了我的理解范围。怎么了?