gpt4 book ai didi

C - 为什么它每次都返回 NULL 值?

转载 作者:行者123 更新时间:2023-11-30 21:39:32 24 4
gpt4 key购买 nike

这是我的源代码:

size_t  ft_strlen(char const *str)
{
return ((*str) ? ft_strlen(++str) + 1 : 0);
}

int ft_memcmp(void const *s1, void const *s2, size_t const n)
{
size_t i;

i = 0;
while (i < n)
{
if (((char *)s1)[i] != ((char *)s2)[i])
return (((char *)s1)[i] - ((char *)s2)[i]);
i++;
}
return (0);
}

char *ft_strstr(char *s1, char const *s2)
{
if (!*s1)
return (NULL);
return (!ft_memcmp(++s1, s2, ft_strlen(s2)) ? s1 : NULL);
}

int main(void)
{
printf("%s\n", ft_strstr("Bonjour", "jour"));
return (0);
}

我的返回值有问题
在主函数中,为什么它返回我而不是s1,这里是“jour”?

最佳答案

你调用ft_strstr("Bonjour", "jour");

ft_strstr 调用 ft_memcmp("onjour", "jour")

ft_memcmp 返回 'o' - 'j',它不为零,所以

return (!ft_memcmp(++s1, s2, ft_strlen(s2)) ? s1 : NULL); 返回 NULL

你的问题是ft_strstr:

我想你想递归地执行它?如果是这样的话,你忘记了递归

这是一个应该可行的递归实现示例。

char *ft_strstr(char *s1, char const *s2)
{
如果 (!*s1)
返回(空);
if (!ft_memcmp(s1, s2, ft_strlen(s2)))
返回(s1);
返回 (ft_strstr(s1 + 1, s2));
}

关于C - 为什么它每次都返回 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com