При присвоении конца строки компилятор ничего не выводит. Если его убрать, тоже не лучше. Выводятся машинные знаки

void    *ft_memset(void *dest, int c, size_t n)
{
    char *str;
    char s;
    size_t i;

    i = 0;
    s = (char)c;
    //dest = str;
    str = (char*)dest;

    while (i < n-1)
    {
        str[i] = s;
        i++;
        //n--;
    }
    *str = '\0';
    return(dest);
}

int main(void)
{
    char str[50];
    printf("ft:%s",((char*)(ft_memset(str, 3, 9))));
}

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

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

А причём тут компилятор?! У вас логическая ошибка, которая вылазит на этапе выполнения программы, а вовсе не при компиляции.

Ошибка заключается в том, что Вы неверно используете указатели на символы, из которых состоит массив.

А вторая ошибка заключается в том, что символ с кодом 3 - это не печатаемый символ. Поэтому, если бы даже программа работала правильно, printf(...) всё равно ничего бы не напечатала.

Правильнее было бы сделать как-то так:

#include <stdio.h>
#include <stddef.h>

void    *ft_memset(void *dest, int c, size_t n)
{
    char *str;
    char s;
    size_t i;

    s = (char)c;
    str = (char*)dest;

    i = 0;
    while (i < n-1)
    {
        str[i++] = s;
    }
    str[i] = '\0';
    return(dest);
}

int main(void)
{
    char str[50];
    printf("ft: '%s'\n",((char*)(ft_memset(str, '3', 9))));
}
→ Ссылка