0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

学益得智能硬件 来源:学益得智能硬件 2023-08-01 17:06 次阅读

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

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




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7534

    浏览量

    128846
  • 内存溢出
    +关注

    关注

    0

    文章

    10

    浏览量

    1145

原文标题:C语言的哪些函数不安全

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言函数调用过程中的内存变化解析

    相信很多编程新手村的同学们都会有一个疑问:C 语言如何调用函数的呢?局部变量的作用域为什么仅限于函数内?这个调用不是指C 语言上的函数调用的
    的头像 发表于 12-11 16:21 3466次阅读

    linux的Tomcat内存溢出怎么解决

    Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会
    发表于 07-16 07:38

    12个很好玩的C语言面试题

    12个很好玩的C语言面试题 12个C语言面试题,涉及指针、进程、运算、结构体、函数内存 1.g
    发表于 05-14 11:53

    内存泄露和内存溢出是什么意思

    面试题目汇总最重要:简单又重点突出的自我介绍!1、内存泄露和内存溢出是什么意思2、static的使用3、break 和continue的区别4、指针函数
    发表于 12-20 07:47

    什么情况下导致内存溢出

    如何避免内存溢出
    发表于 11-02 08:32

    单片机开发中的内存溢出的状况

    在进行单片机开发的过程中,出现单片机内存溢出的小状况及总结:循环遍历溢出在初学C语言时可能会犯的错误,for循环遍历一个数组时,循环的次数超出了数组的长度。c
    发表于 08-27 18:05 851次阅读

    内存溢出内存泄露的区别_内存溢出的原因以及解决方法

    内存溢出内存泄露的区别是什么?内存溢出怎么解决?内存溢出
    发表于 06-01 10:27 2737次阅读

    C语言使用函数调用在内存中究竟发生了什么?

    C语言使用函数调用,我们再熟悉不过了,但是函数调用在内存中究竟发生了什么真的清楚吗?只有搞清楚内存里的内幕,才算完全搞懂
    的头像 发表于 01-13 14:09 749次阅读

    如何解决内存溢出

    ,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致内存溢出错误,即使用户重新执行任务依然无法避免 其实很简单,
    的头像 发表于 09-25 10:54 924次阅读
    如何解决<b class='flag-5'>内存</b><b class='flag-5'>溢出</b>

    java内存溢出的几种原因和解决办法

    Java是一种使用垃圾回收机制的编程语言,由于自动内存管理机制的存在,Java程序中发生内存溢出(Out of Memory)错误的情况相对较少。然而,虽然Java垃圾回收器负责释放无
    的头像 发表于 11-23 14:44 2878次阅读

    java内存溢出排查方法

    Java内存溢出(Memory overflow)是指Java虚拟机(JVM)中的堆内存无法满足对象分配的需求,导致程序抛出OutOfMemoryError异常。
    的头像 发表于 11-23 14:46 702次阅读

    c语言整型数据的溢出计算

    在C语言编程过程中,对于整型数据的溢出问题需要特别关注。当整型数据的值超过了它所能表示的范围时,会发生溢出现象,导致结果不准确甚至出现异常。本文将以详尽、详实、细致的方式,分析C
    的头像 发表于 11-30 11:45 867次阅读

    jvm内存溢出故障排查

    JVM内存溢出是常见且令人头疼的问题,特别是在运行大型Java应用程序或长时间运行的应用程序时。当JVM分配给应用程序的内存不足以处理应用程序所需的数据时,就会发生内存
    的头像 发表于 12-05 11:04 358次阅读

    jvm内存溢出该如何定位解决

    在Java应用程序中,JVM(Java虚拟机)内存溢出是指Java应用程序试图分配的内存超过了JVM所允许的最大内存大小,导致程序无法正常执
    的头像 发表于 12-05 11:05 637次阅读

    内存溢出内存泄漏:定义、区别与解决方案

    与区别 1. 定义: 内存溢出(Memory Overflow)指的是程序在申请内存时,无法获得足够的内存空间,导致程序抛出异常或崩溃。当程
    的头像 发表于 12-19 14:10 1281次阅读