Где ошибка в выделение памяти для строки? Почему в консоли лишние символы?
#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));
