天 富 代 理

  天 富 代 理 【Q和V同:45545 】【顶尖待遇一步到位】-注-册-.-充-值-.-代-理-.-开-户,无需打开页面.欢迎随时咨询!梗概:现在很多用C语言写出来的作业,都是用户输入后,电脑对应操作的。其实这样有没有漏洞呢?
  这样的管理系统,相信大家也不陌生,我们这里不是谈它的功能和怎样实现。。我们就谈谈最后一行。【输入序号】。其实很简单,switch语句,0-6中用case包括就OK了。。最后来个default,一切不就好了吗?
  天 富 代 理 【Q和V同:45545 】【顶尖待遇一步到位】-注-册-.-充-值-.-代-理-.-开-户,无需打开页面.欢迎随时咨询!是的,很多人会对着软件提示按。。但我假设一下:电脑键盘上那么多按钮,一不小心按了字母怎么办?哈哈。。很多人会说:那就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;
  }
  }
  天 富 代 理 【Q和V同:45545 】【顶尖待遇一步到位】-注-册-.-充-值-.-代-理-.-开-户,无需打开页面.欢迎随时咨询!启蒙思路谢谢杨中科老师!!!

猜你喜欢

转载自www.cnblogs.com/zhaoyanchun/p/12784056.html