#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;
}
strlcpy实现
最新推荐文章于 2025-05-08 14:32:35 发布
8945

被折叠的 条评论
为什么被折叠?



