C - получить char в то время как и нажмите на стек - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь создать стек из пользовательского ввода.Чтобы прекратить вставку символов, я прошу пользователя ввести c.Когда пользователь вводит c, я получаю сообщение об ошибке: Run-Time Check Failure #2 - Stack around the variable 'stack' was corrupted.

Это мой код:

#define N 10

typedef char stackType;
typedef struct {
    int top;
    stackType S[N];
} stack;

void createStack(stack *ps) {
    ps->top = -1;
}

int push(stackType data, stack *ps) {
    if (ps->top < N - 1) {
        ps->top++;
        ps->S[ps->top] = data;
        return 1;
    }
    return 0;
}

void Ex01() {
    stack *stack;
    createStack(&stack);
    char input;
    printf("Please enter letters. Enter 'c' top stop:\n");
    scanf(" %c", &input);
    while (input != 'c') {
        push(input, &stack);
        scanf(" %c", &input);
    }
}

int main() {
    Ex01();
}

1 Ответ

3 голосов
/ 20 сентября 2019

Если вы хотите использовать оператор

createStack(&stack);

, тогда stack должен был быть объявлен как stack stack без *

таким образом, что он будет размещен настек вашей программы.

в случае stack *stack вы передаете неинициализированный указатель на функцию createStack, которая может привести к сбою вашей программы.

, если вы все еще хотите использоватьstack *stack Вы должны динамически распределять память для этого указателя, т.е. используя malloc.

...