I just faced a problem when testing an implementation of strlcpy()
long unsigned int ft_strlcpy(char *dst, const char *src, unsigned int len)
{
unsigned int l;
unsigned int i;
i = 0;
while (i < len - 1)
{
if (*src != '\0')
*dst++ = *src++;
i++;
}
*dst = '\0';
return i + 1;
}
I did a test with the original strlcpy()
but I didn't get the same result.
src = "string", len = 6
Output of my strlcpy()
:
return value = 6
dst = strin
Output of the original strlcpy()
:
return value = 10
dst = strin
The result is the same in dst
but the return value should be the length of the string it's trying to make.
From the documentation
The
strlcpy()
andstrlcat()
functions return the total length of the string they tried to create. Forstrlcpy()
that means the length ofsrc
.
You're returning the length of the resulting string, not the length it would have been without the len
limit.
Save strlen(src)
in a variable and return that at the end.
size_t ft_strlcpy(char *dst, const char *src, size_t len)
{
size_t l = strlen(src);
size_t i = 0;
while (i < len - 1 && *src != '\0')
{
*dst++ = *src++;
i++;
}
*dst = '\0';
return l;
}
Also, the len
parameter and the return type should be size_t
.