C语言strlcpy函数的实现

标签: , ,

虽然 strlcpy 函数不是 ANSI C 标准库函数的一部分,但是自己实现一个 strlcpy 函数也不是很难。

/*
 * Copy src to string dst of size siz.  At most siz-1 characters
 * will be copied.  Always NUL terminates (unless siz == 0).
 * Returns strlen(src); if retval >= siz, truncation occurred.
 */
size_t strlcpy(dst, src, siz)
    char *dst;
    const char *src;
    size_t siz;
{
    register char *d = dst;
    register const char *s = src;
    register size_t n = siz;

    /* Copy as many bytes as will fit */
    if (n != 0 && --n != 0) {
        do {
            if ((*d++ = *s++) == 0)
                break;
        } while (--n != 0);
    }

    /* Not enough room in dst, add NUL and traverse rest of src */
    if (n == 0) {
        if (siz != 0)
            *d = '\0';      /* NUL-terminate dst */
        while (*s++)
            ;
    }

    return(s - src - 1);    /* count does not include NUL */
}
赞赏

微信赞赏支付宝赞赏

随机文章:

  1. 又遇VBS中&H前缀十六进制数的陷阱
  2. Windows 7关闭共享后怎样去掉图标上的小锁
  3. ASP无组件上传类大全
  4. 工行网银使用U盾时提示“请选择您要用的证书”
  5. TL-WR703N进入OpenWrt的Failsafe安全模式

留下回复