C语言链栈Pop输出不对劲,输出的是菱形符号

求助:C语言链栈Pop输出不对劲,输出的是菱形符号
代码是如下,在 Symmetry(char *str)中,都进入if (str[j]!=c) ,除了输入单个字符。
搞成输出Pop(top,c),c输出为一个符号,不是字母字符

#include "stdafx.h"
#include"malloc.h"

typedef struct stacknode {
char data;
struct stacknode *next;
}StackNode;

typedef stacknode *LinkStack;

void InitStack(LinkStack top)  //置空栈
{top=NULL;}

int StackEmpty(LinkStack top)  //判栈空
{return top==NULL;}

void Push(LinkStack top, char x)  //入栈
{
StackNode *p;
p=(StackNode *)malloc(sizeof(StackNode));
p->data=x;
p->next=top;
top=p;  //指向栈顶(数据项)的指针
}

void Pop(LinkStack top,char &x)  //出栈
{
StackNode *p=top;  //保存栈顶指针
if (StackEmpty(top)) 
{
printf("Stack Empty");
}
else {
x=p->data;
top=p->next;
free (p);
}
}

char GetTop(LinkStack top)  //取栈顶元素
{
if (StackEmpty(top)) printf("Stack Empty");
else
return top->data;
}

int Symmetry(char *str)  //判断对称性
{
int j,k,i=0;char c;
LinkStack top;
top=(StackNode*)malloc(sizeof(StackNode)); //建栈
InitStack(top);
while (str[i]!='\0') i++; //求串长度
for (j=0;j<i/2;j++) Push(top,str[j]); //前一半入栈
if (i%2!=0) k=(i+1)/2;
else k=i/2;
for (j=k;j<i;j++)
{
Pop(top,c);
if (str[j]!=c) {
return 0;  //有不相同字符,即不对称
}
}
return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
char str[100]; 
int i=0;char c;
printf("请输入字符串:\n");
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';
if (Symmetry(str)) printf("symmetry\n");
else printf("not symmetry\n");
return 0;


}
------解决方案--------------------
void InitStack(LinkStack &top) 

void Push(LinkStack &top, char x) 

void Pop(LinkStack &top,char &x)