当前位置:首页 » 编程语言 » c语言中为什么那么多函数不安全
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中为什么那么多函数不安全

发布时间: 2023-03-04 23:14:44

c语言为什么有函数危险一说啊 比如gets()的溢出操作等;

是的,如果这是某书上的做法,那么,我只能说它为你们提供了一个错误的榜样。
这样使用gets()已经发生了溢出!这是gets()不检查数据边界的bug造成的。
另外,“字符串不是总是以'\0'作为串的结束符”,答案是肯定的,不然puts()函数就不能在合适的地方停下来了。这里st[15]被gets()函数赋值为'\0'。这里要说明的是st[15],st[16]是存在而不合法的,因为字符串实际上就等同于指针,类似st[16]是实在的地址但是是不应该被引用的。
为什么这里溢出没有产生错误?可能系统分配内存是以一个最小的大小整段整段的分配(这个我只是猜测)。你可以试着输入的字符串变长一点,就可以看到内存读写出错的提示了,这就是溢出的严重后果!我在dos系统下测试字符串长了直接当机。
验证1:st[15]被赋值为'\0'
#include"stdio.h"
main()
{
charst[15];
printf("inputstring:");
gets(st);
puts(st);
printf("%d",st[15]);
getch();
}
验证2:
#include"stdio.h"
main()
{
charst[15];
printf("inputstring:");
gets(st);
puts(st);
//printf("%d",st[16]);
st[1]='\0';
printf("%s\n",st);
printf("%s",st+2);
getch();
}
同样的建议:拒绝gets(),这本来就是一个有bug的函数!

❷ c语言不安全为什么还很有多人用

因为C语言比其他语言编译出的软件运行快啊 所以C语言一般放到嵌入式开发
打个比方
你哪天电视遥控器坏了,你要买个新的
1种遥控器芯片是最新电脑用的芯片,用的遥控器用的软件用哪个语言开发都会很快 那这个遥控器价格 呵呵..
另1种遥控器价格就十几块钱 你想它的芯片运算速度能多快... 那假如里面是其他语言 估计你按完开机后10秒(极端例子)后才能响应开机,但用C语言 能马上开机。
安全问题,不就是多个指针跑飞和内存泄漏么,这个真没法避免
但使用指针和内存分配的确能使C语言运行灵活
再说了 其他语言该出Bug也不照样出Bug么