Почему указатель не сдвигается на переменную?

Воссоздаю функцию strdup(char const *s, unsigned int start, size_t len), и мне необходимо сдвинуть указаель s на значение start, но какое бы не было значение start, выводится мусор. Причем на число с клавиатуры все конечно же хорошо. Исходный код:

# include <stdlib.h>
# include <stdio.h>

char    *ft_substr(char const *s, unsigned int start, size_t len)
{
    char    *str;

    if(!(str = (char *)malloc(len + 1)))
        return(NULL);
    s+= start;
    printf("s %c\n", *s);
    while(len-- && *s)
        *str++ = *s++;
    *str = '\0';
    return (&str[0]);
}

int main()
{
    char dest[40] = "Hello my friend";
    printf("ft_substr :%s\n", ft_substr(dest, 6, 9));
}

//Result
s  $
ft_substr :$

Ответы (1 шт):

Автор решения: Harry

Ну смотрите, куда указывает str по окончании наботы? На нулевой символ.

*str = '\0';
return (&str[0]);

Вот вы его и выводите. Сделайте так, например:

char    *ft_substr(char const *s, unsigned int start, size_t len)
{
    char    *str, *ret;

    if(!(str = (char *)malloc(len + 1)))
        return(NULL);
    ret = str;
    s+= start;
    printf("s %c\n", *s);
    while(len-- && *s)
        *str++ = *s++;
    *str = '\0';
    return ret;
}
→ Ссылка