关于一个用栈来检查表达式的括号匹不匹配的代码,其中表达式中括号有三种:(),[]和{}

songsong2008 2004-11-15 07:11:23
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 200
typedef struct
{
char * base;
char * top;
}stack;

int Init(stack *s)
{s->base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!s->base) return 0;
s->top=s->base;
return 1;
}
void Destroy(stack *s)
{free(s->base);
s->base=NULL;
s->top=NULL;
}
void Push(stack *s,char c)
{
*s->top++=c;
}

int pop(stack *s,char *c)
{if(s->top==s->base) return 0;
*c=*--s->top;
return 1;
}
/*---------------------------------------------------------------*/
int Check(stack *s,char *expr)
{int i;
char c[1];
for(i=0;expr[i]!='\0';i++)
{if(expr[i]=='{'||expr[i]=='['||expr[i]=='(') Push(s,expr[i]);
if(expr[i]=='}'||expr[i]==']'||expr[i]==')')
{
if(pop(s,c)==0) return 0;/*栈空,表达式有错*/
else
{if(expr[i]==')')
{
if(c[0]!='(') return 0;
}
else
if(expr[i]-c[0]!=2) return 0;/*'{'和'}'式'['和']'的ASCII码差2*/
}
}
}
if(s->base!=s->top)
return 0;
return 1;
}
/*-------------------------------------------------------------*/
void main()
{
char expr[100];
stack *s;
printf("input the expression\n");
scanf("%s",expr);
if(!Init(s))//第一句warning
exit(0);
if(Check(s,expr))//第二句warning
printf("right\n");
else
printf("wrong\n");
Destroy(s);//第三句warning
}
-----------------------------
程序运行正确,不过有三个warning(即main中用到s的地方都有一个相同的warning:"possible use "s" before definition")这是什么原因呢?我不是已经在stack *s这一句定义s吗?
...全文
436 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlackEagle_ 2004-11-15
  • 打赏
  • 举报
回复
在stack *s;后面加一句:
s = null;
kobefly 2004-11-15
  • 打赏
  • 举报
回复
严奶奶数据结构书上的啊
有部分伪代码
sharkhuang 2004-11-15
  • 打赏
  • 举报
回复
压栈匹配扩府经典算法哈
liujingfu123 2004-11-15
  • 打赏
  • 举报
回复
在main()中,你的s 是一个指针,你只是声明了,但没分配空间给它(没初始化),而是调用函数给它初始化的。
内容概要:本文系统研究了基于模糊控制算法的水位控制系统,重点阐述如何利用Matlab实现模糊控制器的设计与仿真。文章深入解析了模糊控制的核心环节,包括模糊化处理、规则库构建、模糊推理机制以及去模糊化方法,并将该算法应用于具有非线性、时变特性的水位控制过程中,有效提升了系统的响应速度、控制精度与抗干扰能力。通过建立被控对象的数学模型,结合Matlab/Fuzzy Logic Toolbox完成控制器设计,并进行系统仿真验证,展示了模糊控制在面对模型不确定性与外部扰动时的优越性能。同时提供了完整的代码实现路径,便于读者复现、调试与二次开发。; 适合人群:具备自动控制原理基础知识及Matlab编程能力的高校研究生、科研人员和工程技术人员,尤其适用于从事智能控制、过程控制、水利自动化等方向的研究与开发人员。; 使用场景及目标:①掌握模糊控制算法在非线性系统中的建模与应用方法;②通过Matlab实现水位控制系统仿真,深化对智能控制策略的理解;③为工业液位控制、水资源管理、自动化灌溉等实际工程场景提供可复用的技术方案与设计参考。; 阅读建议:建议结合Matlab代码逐模块分析控制流程,重点关注模糊规则表的设计与隶属度函数的参数整定,鼓励动手修改输入输出变量及规则逻辑,通过对比仿真结果优化控制性能,从而深入理解模糊控制的本质与工程应用技巧。
内容概要:本文深入探讨了Kali Linux渗透测试在芯片行业EDA设计云平台中的实战应用,聚焦于核心资产基础设施的安全性评估。通过模拟真实攻击路径,系统性地展示了如何利用Kali工具集对EDA环境中关键服务(如FlexLM许可证管理、NFS存储、X11/VNC协议)进行内网枚举、中间人攻击及权限横向移动。文章结合Python与Scapy编写的自动化探测脚本,揭示了未授权访问FlexLM服务导致IP核泄露或流片中断的重大风险,强调了协议级漏洞挖掘与低噪声扫描技术在高敏环境中的实战价值。; 适合人群:从事网络安全、渗透测试的技术人员,尤其是关注工业级专用系统(如EDA平台)安全的红队成员、安全研究员及芯片企业IT安全部门人员;具备一定网络协议基础和Python编程能力者更佳。; 使用场景及目标:①评估芯片设计内网的访问控制与隔离策略有效性;②发现并修复EDA平台中License服务、共享存储等组件的配置缺陷与未授权访问漏洞;③模拟APT攻击链,检验零信任架构与云原生安全防护机制的健壮性; 阅读建议:此资源不仅提供攻击代码示例,更强调对业务逻辑(如License依赖对流片的影响)的理解,建议读者在合法授权环境下复现测试流程,深入掌握从网络扫描到权限突破的完整渗透链条,并结合实际架构优化防御体系。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧