在c中创建一个类似strlcpy的函数

问题描述 投票:0回答:1

我尝试创建一个像 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,但他告诉我功能不完全一样。

c pointers strlcpy
1个回答
0
投票
这是一个实现:

#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 次。

© www.soinside.com 2019 - 2024. All rights reserved.