在软件测试课上老师给出了如下简单代码并让我们对其作出分析

#include <stdio.h>

int main(void)

{

     char buff[10];

     memset(buff,0,sizeof(buff));

     gets(buff);

     printf(“\n The buffer entered is [%s]\n”,buff);

     return 0;  

}

看似短小简单的代码,却可能隐藏着令程序崩溃的隐患,我们可以看到,程序首先定义了一个能容纳十个字符的字符数组,然后对其进行了初始化操作,从键盘读入新的字符并且赋值给字符数组,再将其打印出来,但是,在从键盘读入的过程中,用户肯能输入超过十个字符,这样就带来了数组越界的可能性,因而,我们可以自己写一个gets函数,避免这种状况的发生

char* const Gets(char* const array,int maxlength)
{
      int i;
      char c;
      for(i=0;i<maxlen;i++)
      {
           c=getchar();
           if(c!='\n')array[i]=c;
           elsebreak;
      }
      array[i]='\0';
      returnarray;
}

其中,maxlength为可接受的最大字符长度