编写自己的shell解析器(一)一个简单的循环命令输入和历史打印

这是整个代码的第一部分。

代码很短,结构很简单。用到的数据结构就是一个循环数组来存储输入的命令。
命令历史记录最多为12个。

问题分析和解决部分没有引用完整函数实现即声明,可能会影响阅读。具体代码见本博客最下。

我的分析:

//命令输入
/*
 需要保证
 1.访问字符串中任意位置
 2.可以分割字符串 并 进行存储
 3.能够查看之前命令

 实现
 1.用char* 类型存储
 2.循环数组存储12个命令

 */

这里我简单介绍下遇到的问题和解决方法。

问题一

问题_1_1

很快代码便写好了,我的存储输入命令的字符串声明为:char *input_order,循环数组中存储命令的字符串数组声明为:char *the_order[12];
第一次编译,发现打印出的历史记录,所有的命令都是同一个。如,我第一次命令输入为:aaa,第二次为:bbb,输出的历史记录两次均为bbb。

查找原因_1_1

debug下发现,当input_order值改变时,命令 the_order的值立刻改变。
经过筛查,是为了达到封装性,把input_order的值到函数cin_INPUT_ORDER_to_HISTORYY中,赋值给the_order时,使用的是直接赋值:the_order = input_order。the_order中存储的是input_order的地址。这解释了为什么input_order变化时,the_input随之改变。

解决_1_1

于是我把赋值语句改成:strcpy(the_input,order_input)的形式,编译,运行。

问题1_2

这时。。发现竟然莫名其妙卡在order_input输入函数:scanf(“%s”,input_order)上。debug下显示不发访问input_order。加上取址运算符后,可以跳过这个步骤,但是input_order的值为空。

查找原因_1_2

经过分析,发现声明时(见最下面main函数ÿ

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值