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;}?