我尝试创建一个像 strlcpy 这样的函数,我将其命名为 ft_strlcpy。 我的函数像 ft_strlcpy 一样工作吗?
size_t ft_strlcpy(char *dst, const char *src, size_t dstsize)
{
size_t len;
len = ft_strlen(src);
if (dstsize)
{
while (dstsize-- > 1 && *src)
*dst++ = *src++;
*dst = '\0';
}
return (len);
}
我尝试询问claud ai,但他告诉我功能不完全一样。
#include "libft.h"
size_t ft_strlcpy(char *dest, const char *src, size_t size)
{
size_t count;
count = 0;
if (size == 0)
return (ft_strlen(src));
while (src[count] != '\0' && count < (size - 1))
{
dest[count] = src[count];
count++;
}
dest[count] = '\0';
return (ft_strlen(src));
}
https://github.com/kmoroz/libft/blob/master/ft_strlcpy.c
您正在检查(dstsize-- > 1 && *src)
,因此您检查
*src
是否为真。相反,您应该将其与示例中的
\0
进行比较。另外,
dstsize--
评估
dstsize
,然后才递减它,所以如果
dstsize
是10,那么你将执行循环块10次,而
count < (size - 1)
的检查检查
count
是否比更小
size - 1
,也就是说,如果
size
是10,那么
count
会先是0,然后是1,一直到8,到9的时候就不会进入循环了。因此,如果 size 为 10,循环将执行 10 次,而在示例中它将执行 9 次。