2015-08-20 3 views
-5

Это мой исходный код:C - почему он возвращает мне значение NULL каждый раз?

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

+4

Вы используете strlen рекурсивно ?! Зачем? –

+0

Я предлагаю отладить его с помощью gdb (отладка - создавать контрольные точки и контролировать переменные). Вы также можете вручную отлаживать, распечатывая значения в функциях. – Spidey

+0

Уильям Нет отношений с сообщением. –

ответ

0

вы звоните ft_strstr("Bonjour", "jour");

ft_strstr называет ft_memcmp("onjour", "jour").

ft_memcmp возвращает 'о' - 'у', который не равен нулю, так

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)); }

Смежные вопросы