我知道,从源复制到目标字符数组(我们希望目标以null终止)时,strlcpy比strncpy更安全。
可以使用以下包装器吗?

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

10-05 18:36