一个C语言程序,请高手帮忙看一下错误

来源:百度知道 编辑:UC知道 时间:2024/06/06 15:28:54
老师的要求是利用栈将十进制转化为八进制,可是一直盖不正确,请高手帮忙看一下

#include "stdio.h"
#include "stdlib.h"

#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define stacksize 20
typedef int status;
typedef int ElemType;

typedef struct {
ElemType *base;
ElemType *top;
int length;
}SqStack;

status Initstack(SqStack *s){//建立站
s->base=(int *)malloc(20*sizeof(int));
s->top=s->base;
if(!s->base) exit(OVERFLOW);
s->length=stacksize;
return OK;
}

status Push(SqStack *s,int e){//为站加入新的元素
//if(s->top-s->base>=s->length){//占满 追加空间
// s->base=(int *)realloc(s->base,(s->length+1)sizeof(int));
// if(!s->base) exit(OVERFLOW);
// s->length+=1;
//}
*(s->top++)=e;
return OK;
}

status Pop(SqStack *s,int *e){
if(s->top==s->base) return ERROR;
e=--(s->

你的这种错误是由于定义时地址的传递错误而造成的,下边是我对你的程序的修改:

#include "stdio.h"
#include "stdlib.h"

#define OK 1
#define ERROR 0/*改成0,是因为为空返回TRUE即1,否则返回FALSE即0。而你下边用了!StackEmpty(s)去判断,那你想想假如不为空返回你的-1,再来个!是不是0了,而这时while是不会执行的因为0!=0不成立!*/
#define OVERFLOW -2
#define stacksize 20
typedef int status;
typedef int ElemType;

typedef struct {
ElemType *base;
ElemType *top;
int length;
}SqStack;

status Initstack(SqStack **s){/* 建立站 */ /*此处为何使用二级指针,和下边的status Pop(SqStack *s,int **e)函数请看在main函数中的解释。这两个地方才是致命的错误所在!*/
(*s)->base=(int *)malloc(20*sizeof(int));
(*s)->top=(*s)->base;
if(!(*s)->base) exit(OVERFLOW);
(*s)->length=stacksize;
return OK;
}

status Push(SqStack *s,int e){/* 为站加入新的元素 */
if(s->top-s->base>=s->length){/*占满 追加空间*/
s->base=(int *)realloc(s->base,(s->length+1)*sizeof(int));/*realloc追加的时