Где ошибка в выделение памяти для строки? Почему в консоли лишние символы?

Ввод с клавиатуры сверху ,а снизу то что выдает программа. Почему лишние символы?

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

int main()
{
    char *t, a, temp;
    int b = 0, n = 1, i = 0;

    t = malloc(n * sizeof(char));

    while (a != '\n')
    {
        scanf("%c", &a);
        if (a != '\n')
        {
            if (n == 1)
            {
                t[n - 1] = a;
            }
            else
            {
                t = (char*)realloc(t, n);
                t[n - 1] = a;
            }
            n++;
        }
    }
    printf(t);
    return 0;
}

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

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

Добавьте 5 строк.

    if (a != '\n')
    {
        // Все, как у вас
    }
    else
    {
        t = (char*)realloc(t, n);
        t[n - 1] = 0;
    }

Но вообще-то на каждый символ делать realloc — очень неэффективно...

→ Ссылка
Автор решения: Sergey Tatarincev

У вас изначально ошибка. Вы выделяете всего 1 байт. Нельзя залазить за пределы выдлеленной памяти.

int b = 0, n = 1, i = 0;
t = malloc(n * sizeof(char));

для начала добавьте ввод n или задайте изначально достаточным для строки

далее по последнему символу. или см. предыдущий ответ, или после цикла

t[n-1] = 0; 
printf(t); 

или в самом начале инициализировать ваш массив нулями

t = malloc(n * sizeof(char));
memset(t,'\0',n * sizeof(char));
→ Ссылка