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

时间:2015-08-20 21:54:23

标签: c

这是我的源代码:

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”?

1 个答案:

答案 0 :(得分:0)

你致电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) { if (!*s1) return (NULL); if (!ft_memcmp(s1, s2, ft_strlen(s2))) return (s1); return (ft_strstr(s1 + 1, s2)); }