c - 在没有 strlcpy 的平台上,strlcpy 相当于 strncpy

标签 c arrays string copy strncpy

我知道,在从源字符数组复制到目标字符数组(我们希望目标以 null 结尾)时,strlcpystrncpy 更安全, 下面的包装可以吗?

size_t strlcpy(char *dst, const char *src, size_t size) {
  if (size != 0) {
    int maxSize = size - 1;
    int currSize = -1;
    while ((++currSize < maxSize) && (*dst++ = *src++));
    *dst = 0;
    return currSize;
  }
  return 0;
}

请评论。

最佳答案

检查 size 是否大于零是有误导性的,因为 size_t 是无符号的。更具可读性的检查是 if (size != 0) ...

另一个问题是,strncpy 将其目的地用零填充到 s,而 strlcpy 则不会这样做。如果您想匹配 strlcpy 的行为,请在不可用的系统上编写您自己的实现,而不是依赖 strncpy

关于c - 在没有 strlcpy 的平台上,strlcpy 相当于 strncpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42971120/

相关文章:

c - 作为 switch 语句实现的菜单

javascript - 首先对包含重音符号的大写字母进行排序

java - HashMap.put() 覆盖已经存在的值,即使 Key 值不同

c# - 解析大型 xml 文件以在元素之间添加新行真的很慢

c - 如何在 Main() 之前创建数组/结构并在 C 中对其进行初始化

c - 二维数组是双指针吗?

c++ - 如何将以微秒为单位的纪元时间转换为可读格式

java - 如何在开源 Java 中禁用数组边界检查?

arrays - 在 Swift 4.0 中过滤结构数组

c++ - 凯撒密码 - 怎么了?