C - Невозможно получить стек для запуска в моей программе - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь создать стек, но у меня возникла проблема с его инициацией.Код, который у меня есть:

#define LINELN 72    
#define STACKSZ 25    
#define NEWLN '\n'    
#include <stdlib.h>    
#include <stdio.h>  

// interface struct for stack
typedef struct stack {    
  char data[STACKSZ];    
  int top;    
} stack;    

void initstk(stack *s1);    
int emptystk(stack s);    

int main() {
  stack s1;
  initstk(s1);
  printf("%d",emptystk(s1)); 
  exit(0);
}

void initstk(stack *s1) {
  s1->top=-1;
}

int emptystk(stack s) {
  if(s.top == -1){
    return 1;
  }
  else{
    return 0;
  }
}    

Я хочу, чтобы он распечатал 1, так как стопка пуста, но она все еще распечатывается 0.Я не очень понимаю.Может ли это быть из-за указателя?

1 Ответ

0 голосов
/ 05 февраля 2019

Вы объявляете:

void initstk(stack *s1);
/*...*/
int main() {
stack s1;

, но затем вызываете как:

initstk(s1);

Поскольку initstk принимает аргумент указателя, вы должны передать адрес s1:

initstk(&s1);

Я удивлен, что ваш компилятор не предупредил вас о несоответствии.

...