c语言gets函数编译出错,克服C语言gets函数缺陷的方法初探

克服C语言gets函数缺陷的方法初探

一 gets函数简介

gets函数是C语言用于从stdin流中读取字符串的函数。gets函数接收用户从键盘上输入的字符直到遇到回车时终止。原型是:

char* gets(char *buff);

举例:

#include

int main()

{

charstr[30];

while(!str!= gets(str));

printf(“%s\n”,str);

return 0;

}

如果读取成功,gets函数返回值是和str的值相同的指针,否则,返回空指针。

二 gets函数的漏洞

gets函数是个危险的函数,原因是用户在键盘上输入的字符个数可能大于buf的最大界限,而gets函数并不对其检查。如在上例中,如果用户在键盘上输入1111111111111111…………….输入1的个数大于30,这时会造成程序崩溃。

三 gets函数漏洞的解决方案

我们可以重写一个新的函数Gets

原型是char* Gets(int maxlen)

这个函数让程序员指定一个最多输入字符的个数,在函数中为字符分配存储空间,函数返回char*

这个函数是针对动态数组而做的,如

int main()

{

char*p;

p=Gets(18);

}

Gets函数的参数之所以舍弃了传入的指针,是因为传入函数的指针可能不可靠,会造成程序崩溃,比如传入一个野指针。

<

你可能感兴趣的:(c语言gets函数编译出错)