在软件测试课上老师给出了如下简单代码并让我们对其作出分析
#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为可接受的最大字符长度