梗概:现在很多用C语言写出来的作业,都是用户输入后,电脑对应操作的。其实这样有没有漏洞呢?
这样的管理系统,相信大家也不陌生,我们这里不是谈它的功能和怎样实现。。我们就谈谈最后一行。【输入序号】。其实很简单,switch语句,0-6中用case包括就OK了。。最后来个default,一切不就好了吗?
是的,很多人会对着软件提示按。。但我假设一下:电脑键盘上那么多按钮,一不小心按了字母怎么办?哈哈。。很多人会说:那就default语句执行咯。但事实上是不是呢?
我亲自试了试,吓尿了。你猜怎样?整个软件崩溃了。。why?【读者们可以试试】
因为switch语句中判断的是int类型,你却输入个char 类型的。当然会崩溃啦!!有人聪明了!那判断输入的是否为数字就可以啦。。怎样判断呢?
1、字母有数值范围的,那个范围之内的数就报错。。但这是好方法吗?我的软件可以有200个选项吧?不可以说以后的就不能用了吧?所以这个方法不好!!
下面介绍个很有用的方法!具体思路是:
1、用char buffer[256];来接受输入内容,
2、然后用int i=atoi(buffer);转成int 类型。3、用wsprintf(buffer_Temp,"%d",i);。
4、
if(strcmp(buffer,buffer_Temp)!=0) { printf("输入的不是合法整数!!"); continue; }
下面我把它写成函数
BOOL IsInt(char *buffer) { int i=atoi(buffer); int ret; char buffer_Temp[256]; ZeroMemory(buffer_Temp,sizeof(buffer_Temp)/sizeof(char)); wsprintf(buffer_Temp,"%d",i); if(strcmp(buffer,buffer_Temp)!=0) { return FALSE; } else { return TRUE; } }
启蒙思路谢谢杨中科老师!!!