全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-08-01 17:06

人气:

作者:admin

标签: C语言  内存溢出 

导读:这几个函数,要说跟内存溢出没有关系的,只有strcmp。...

看一道大华的面试题,题目并不难。

问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虽然可以指定连接的字符个数,但是函数内部在使用内存的时候,也没有做内存越界的判断,越不越界只能靠用户自己把握。




审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信