c语言读取txt文件用栈匹配括号的问题。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
struct StackNode
{
char data;
struct StackNode *next;
}StackNode;
int main()
{
FILE *fp=NULL;
struct StackNode *s=NULL;
int flag=1;
char ch;
fp=fopen("fname.txt","r");
ch=fgetc(fp);
while(!feof(fp)&&flag)
{
switch(ch)
{
case '['||'(':
Push(s,ch);
break;
case ')':
if(!s&&GetTop(s)=='(')Pop(s);
else flag=0;
break;
case ']':
if(!s&&GetTop(s)=='[')Pop(s);
else flag=0;
break;
}
ch=fgetc(fp);
}
fclose(fp);
return 0;
}
int Push(struct StackNode *s,char ch)
{
struct StackNode p;
p=(struct StackNode
)malloc(sizeof(struct StackNode));
p->data=ch;
p->next=s;
s=p;
return OK;
}
int Pop(struct StackNode *s)
{
struct StackNode *p;
if(s==NULL)
return ERROR;
p=s;
s=s->next;
free (p);
return OK;
}
char GetTop(struct StackNode *s)
{
if(s!=NULL)
return s->data;
}
报错问题如下,求改进

img