我知道,从源复制到目标字符数组(我们希望目标以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
。