Ваша push
функция должна принимать
- адрес заголовка стека (правильно) и
- символ, который необходимо вставить (для этого нужноисправление).
Таким образом, сигнатура метода становится:
void push(Stack**head, char value);
, и в теле функции вы добавляете value
к вершине стека как:
temp->name = value;
Кроме того, вы всегда должны проверять возвращаемое значение malloc
.
Поскольку вы возвращаете извлеченное значение из функции pop
, тип возвращаемого значения не должен быть void
, измените его наchar
в объявлении и определении как:
char pop(Stack**head)
Существует еще одна логическая ошибка:
Для начала вставьте все символы ввода в стек.Далее вы начинаете совать персонажей.Там нет завершающего условия для вашего появления.Когда вы вытолкнули все символы (поэтому ваш стек пуст), следующий вызов pop
приведет к сбою, так как вы будете разыменовывать указатель NULL
(*head
будет NULL
).
Чтобы исправить это, вы должны вытолкнуть только те символы, которые нажали, выполнив:
while(i<lenght && pop(&head)==word[i]){
Поскольку &&
замкнут накоротко, pop
не будет вызываться после того, как вы нажметевсе символы.
В качестве альтернативы (и предпочтительного подхода) нужно написать другую функцию с именем isEmpty
, которая возвращает true
/ 1
, когда стек пуст, и использовать этот метод перед вызовом pop
способ.