C语言的哪些函数会导致内存溢出?如何改进?

看一道大华的面试题,题目并不难。
问strcat strncat strcmp strcpy哪些函数会导致内存溢出?如何改进?
这几个函数,要说跟内存溢出没有关系的,只有strcmp。
它的功能只是比较两个字符串是否相等,给定地址,然后从地址开始逐个向后比较,并不涉及写内存,所以也不存在溢出的说法。
剩下的三个函数都有可能导致内存溢出。
就拿strcpy来说,作用就是把源字符串拷贝到目的内存中,实现的方法就是循环逐个赋值,如果源字符串过长,strcpy也不好把控,这样就会导致一些未知的情况发生。
那么有人可能会问,strcpy里面为什么不做个判断,如果目的内存不够,就停止赋值。
我们来看下strcpy的参数。
char *strcpy(char *dest, const char *src);
只有两个地址,在c语言中,只给你一个地址,是不好知道从这个地址开始,向后多少个字节是能用的。
于是在某些平台上,就出现了strcpy_s这样的函数。
strcpy_s(char *dest, int size, const char *src);
功能和strcpy差不多,就是多了个参数,第二个参数表示目的内存的大小,这样在拷贝的时候,就能精确的判断出内存是否越界。
当然了,如果你传参的时候瞎写了一个长度,这就不是函数的问题了,是你的问题。
strcat也是用样的问题,把一个字符串接在另一个字符串的后面,这个过程也没有考虑内存越界的问题。
strncat虽然可以指定连接的字符个数,但是函数内部在使用内存的时候,也没有做内存越界的判断,越不越界只能靠用户自己把握。


机器人被逐步“唤醒” 生产效率和质量不打折
爱思强公布上半年第二季度业绩,MOCVD系统的需求上升
WDZ低烟无卤电缆
Parrot新一代四轴无人机ANAFI现推出Extended全能版套装
锡膏之所以会产生颗粒的情况,是什么问题?
C语言的哪些函数会导致内存溢出?如何改进?
为什么越来越多的人选择工业温湿度开关,它有什么优势
2170万辆,乘联会2023年最新数据!
荣耀总裁赵明宣告荣耀Magic 2 3D感光版将于3月7日正式出售
FPC特殊单面双接触板怎样来改善
一文解析UWB雷达的工作原理
小米5C:价格完胜荣耀V9, 外观比肩iPhone, 配置甩魅族几条街
冰箱结霜 有这些办法可以处理
鸿蒙系统一无是处?鸿蒙有何优势?
一“脸”通行!
彩超诊断仪是什么,它和B超的区别是什么
电磁波怎么变成为声波的原理分析
熔断器工作原理及使用注意事项
封装变化与面向接口编程
LT1173风力发电机充电控制器电路图