成都网站建设设计

将想法与焦点和您一起共享

c语言gets函数漏洞 c语言gets出错

c语言的gets函数编译不成功阿,很短的程序?

C语言的gets函数一般包含在stdio.h头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。

创新互联是专业的眉山网站建设公司,眉山接单;提供成都网站建设、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行眉山网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

函数原型:

char *fgets(char *buf, int bufsize, FILE *fp);

参数解释:

参数一是输入字符串存放地址,

参数二是存放地址最大容量,

参数三是从哪里输入,可以从文件也可从输入设备,如果从输入设备输入这个参数可以写成stdin,如果从文件输入此参数为文件指针。

返回值:

输入成功返回参数一,失败返回NULL.

补充知识:

为什么gets不让用呢,我们可以看它的原型:char *gets(char *buf);

这个函数可以一直输入知道换行或者EOF,它并不考虑buf空间是否足够大能放下,这就容易导致溢出,有些别有用心的人就会利用这个漏洞去攻击你的程序。

而fgets可以通过第二参数保证不会读入超过buf空间的字符。

c语言:如图,请问一下哪里出错了?

首先解答一下这个C语言代码出错的原因:

第一个gets未定义:

出现这个错误一般是没有包含相应的头文件,或者库里没有这个函数。这里应该是没有这个函数。gets(char *dest)是一个老的库函数,采用这个函数存在越界的安全隐患。它只有一个参数,如果输入的字符个数超过dest内存空间,程序可能失败,也可能被黑客利用这个漏洞进行不正常操作。可以使用fgets(char *dest, int size, FILE *fp)代替,它可以通过第二个参数设置最大输入解决上面的问题。

第二/三个strcat参数2类型不符:

strcat的第二个参数语言char *,而调用时jiji[i]是char,可以写成jiji[i],改完语法没有问题,逻辑要再自己评估一下。

第四个返回局部变量re:

re是lai函数内部的数组,在栈内,当函数执行完会进行释放资源。其栈内的空间可能用于它处,内容可能被改变。建议是不要返回局部变量。

以上就是这个代码语法出错的解答。

另外补充一下:

整体来看这段代码代码比较长,for循环也比较多,后续再优化一下。先实现功能再优化。下面这个代码你可以参考。

C语言里的gets()函数

对的,确实有举出漏洞。以下是个人建议,希望对楼主有所帮助。

首先我们应该先认识一下gets和scanf的语法解构。如果要给一个字符串赋值,那我们可以这样做。

int

a[10];

gets(a);

或是

for(i=0;i10;i++)

scanf("%d",a[i]);

由上我们可以看出,scanf每次只能输入一个字符,然后回车,继续循环。

而gets呢,需要把所有的字符串都输入完后回车结束。这就造成了一个问题。

如果我们输入的字符串多于10个单位呢?我们输入的“a[20]”个空间的字符。

这就可能会产生溢出漏洞。

仅代表个人建议,希望对楼主有所帮助。


网站题目:c语言gets函数漏洞 c语言gets出错
文章起源:http://chengdu.cdxwcx.cn/article/dopeisd.html