求解答,为何栈疑似被赋值成功却显示为空。

我想把字符串a前半部分的字符串,赋值给栈,比如a的字符串为abba,然后栈S就存 ab,再把栈S取栈顶元素 赋给字符串数组b,b数组就有ba、为啥没有成功??求指出,目前显示的问题应该是我甚至都没有给栈成功复制。栈还是空的!

这是运行结果:

img

其实是要写一个回文串的判断,我卡在前面了,还没开始写回文串判断的算法嘞,但是我看运行结果,字符串b有被赋值,但是为什么 会显示出:S is empty?以及秉??求告诉我,以下是代码:


#include 
#include 
#include 
#define OK 1
#define OVERFLOW -1
#define ERROW 0
#define MAXSIZE 10 //最大元素个数 

typedef struct //储存结构 
{char *base;
char *top;
int stacksize;
}Stack;

int InitStack(Stack &S)  //初始化 
{S.base=new char[MAXSIZE];
if (!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK; 
}

int isEmpty(Stack &S)  //判断是否为空 
{if(S.top==S.base) return OK;
else return ERROW;
}

int isFull(Stack &S) //判断是否满 
{if(S.top-S.base==MAXSIZE)
return OK;
else return ERROW;
}

int insert(Stack &S,char i)
{if(isFull(S)) return ERROW;
*(S.top++)=i;
return OK;
}

void outStack(Stack &S,char *p,int len)
{if(isEmpty) printf("S is empty\n"); 
for(int i=0;iint main()
{char a[10];
int i;

char *p;
int lenth,len;
printf("请输入字符串\n");
scanf("%s",a);
Stack S;
InitStack (S);
lenth=strlen(a);
p=a;
len=lenth/2;
for(i=0;iinsert(S,*(p++));
}
char b[len];
p=b;
outStack (S,p,len);

printf("%s",b);

 return 0;
}

if(isEmpty)改为 if(isEmpty(S))
isEmpty是函数名,肯定不是0啊,所以if(isEmpty)是成立的,自然输出S is empty了。而实际你是要判断S是否为空,是函数调用
char b[len+1] = {0}; 数组长度要加1,并且要初始化。不然%s输出时,缺少字符串结束符,就出现乱码了