读书人

strlcpy兑现

发布时间: 2012-11-05 09:35:11 作者: rapoo

strlcpy实现

#include <stdio.h>/* * 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. */int strlcpy(char *dst, const char *src, int 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 */}int main(){    char buf[5];    char *s[] = {"abc", "abcd", "abcde", "abcdef"};    int i, len, size = sizeof(buf);    for (i = 0; i < 5; i++) {        buf[i] = '#';    }    printf("size = %d\n", size);    for (i = 0; i < 4; i++) {        len = strlcpy(buf, s[i], size);        printf("src = %s, len = %d, buf = %s", s[i], len, buf);        if (size <= len) {            printf(", truncation occurred\n");        } else {            printf("\n");        }    }    return 0;}
?

读书人网 >编程

热点推荐