解决segmentfault一个网友的问答---c中fgets和gets的区别

321 阅读1分钟

问题描述

前两天心血来潮,在segmentfault注册了一个账号,准备换个地方学(mo)习(yu), 看到一个网友的关于c的问题,无人问津,想当初我也是底层出身,c语言傍身,我就点进去看了一下。

网友用C语言实现了一个文件系统,在控制台终端输入自己定义的命令,可以显示命令对应的内容,就像你在linux终端,输入ls可以列出当前目录中的文件。他用fgets函数来获取控制台输入的内容,来进行判断,但是每次获取到的命令都不会按照预定的判断去走相应的分支,而总是输出命令错误。 换成gets函数运行正常,但是gets函数在C语言中不安全,会有告警。

分析定位

分析他的代码得知,他文件系统中的所有命令事先用一个字符数组存了起来,然后通过fgets函数,从终端得到的字符串,用这个字符串和事先存放字符数组中的命令进行比较,判断是否一致,然后进行相应的操作。这个思路是没错的,但fgets这个函数比较特殊,它不仅会接收输入的字符,还会把换行‘\n’,也存放进去。所以在用strcmp函数比较判断的时候,它的值永远不会等于0 看debug截图

图片.png

后记

我的回答被他采纳,很开心,这就是摸鱼的成就感吧