C gets dangerouse

我有一个test_client.c文件,里面使用了C库自带的函数gets,可是当我编译时,出现这个warning,

test_client.c:(.text+0x128):warning:the 'gets' function is dangerouse and should not be used.

 

出现这个警告,在网上搜一下,会有好多答案,但我还是啰嗦一下吧!

#include <stdio.h>
main()
{
     char buff[2];
     gets(buff);
     printf("%s\n", buff)
}

 执行gets的时候,会等待我输入。那现在看一下,我输入不同的长度,会有什么样的结果。(这是在windows里面运行的情况,原理是类似的,截图见附件的图片)

当我输入a,输出a。(图01)

当我输入abc,输出 abc。大家注意,这个时候buff已经越界了,所以此时输入的值,就会覆盖掉不属于buff的那部分空间。(图02)

当我输入abcdef,输出abcdef。这时,它还出现一个框框,"***"指令引用的内存“***”。该内存不能written.(图03)

 

由以上输入事例,我们看出,gets是不能控制输入长度的。那取而代之的函数就是fgets,它可以控制输入的长度。

像刚才这个例子,我们就可以改成

#include <stdio.h>
main()
{
   char buff[2];
   fgets(buff,2, stdin);//stdin 是标准的输入流
   printf("%s\n", buff);
}

这个时候,我输入abc,输出的结果也是a;(图04)

至于fgets具体的使用,大家可以参考这个网址。

http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

fgets在 stdio.h 里面

注:gets 不读入最后的回车(\n), 而fgets是读入的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值