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

问题描述 投票:0回答:1

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

  1. strlcpy()是OS X上的libc的一部分吗?
  2. 如果是这样,声明是什么,或者在Web上的哪个位置是头文件的副本?
  3. 如果没有,它是OS X上系统库的一部分吗?
  4. 如果没有,OS X上是否还有另一个“安全”的strcpy()
c macos header-files libc
1个回答
1
投票

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

STRLCPY(3) - BSD库函数手册 - STRLCPY(3)

name

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。请注意,NUL的空间应包含在dstsize中。

strlcpy()复制到dstsize - 从字符串src到dst的1个字符,NUL-如果dstsize不为0则终止结果。

strlcat()将字符串src追加到dst的末尾。它最多会附加dstsize - strlen(dst) - 1个字符。然后NUL终止,除非dstsize为0或原始dst字符串长于dstsize(实际上这不应该发生,因为这意味着dstsize不正确或者dst不是正确的字符串)。

如果src和dst字符串重叠,则行为未定义。

© www.soinside.com 2019 - 2024. All rights reserved.