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

时间:2018-02-28 07:12:10

标签: c macos header-files libc

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

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

  2. 如果是这样,声明是什么,或者网页上的哪个是头文件的副本?

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

     

NAME

     

strlcpy,strlcat - 大小有界的字符串复制和连接

     

LIBRARY

     

标准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字符串重叠,则行为未定义。