防止越界访问数组

简介: 防止越界访问数组

示例代码:

#include <stdio.h>

char Buff[12];

/* 获取数组大小 */
#define  GET_BUFF_SIZE(Arry)    (sizeof((Arry)) / sizeof(Arry[0]))
/* X自加时访问Arry数组,防止数组越界访问 */
#define  INC_BUFF_NUM(Arry, X)  {(X)++; (X) = (X) % GET_BUFF_SIZE((Arry));}

int main(void)
{
    char i = 0;
    char n = 0;

    while(1)
    {
        Buff[i] = n;
        printf("Buff[%d] = %d\n", i, Buff[i]);
        INC_BUFF_NUM(Buff, i);

        n++;
        if(n == 20)
            break;
    }

    return 0;
}

运行结果

Buff[0] = 0
Buff[1] = 1
Buff[2] = 2
Buff[3] = 3
Buff[4] = 4
Buff[5] = 5
Buff[6] = 6
Buff[7] = 7
Buff[8] = 8
Buff[9] = 9
Buff[10] = 10
Buff[11] = 11
Buff[0] = 12
Buff[1] = 13
Buff[2] = 14
Buff[3] = 15
Buff[4] = 16
Buff[5] = 17
Buff[6] = 18
Buff[7] = 19

通过打印可以看出 “i = i % BUFF_MAX;” 把数组的最大值限制在BUFF_MAX-1下,i++不会使数组越界。

相关文章
|
安全 C语言
snprintf的用法
简要介绍了snprintf的常用方法,能大大的简化我们的代码
开源! ! ! 轻量级多功能按键驱动-LiteButton
开源! ! ! 轻量级多功能按键驱动-LiteButton
|
机器学习/深度学习 编解码 算法
|
程序员 开发工具 git
批处理--节约你的开发时间
批处理--节约你的开发时间
硬件看门狗--保护你的硬件不宕机
常用的都是软件看门狗,需要依赖MCU内部的独立看门狗或者窗口看门狗,本次使用的是硬件看门狗,硬件上更加稳定可靠
从零开始做逆变器系列 ( 二 ): 单极性、双极性、单极性倍频SPWM
从零开始做逆变器系列 ( 二 ): 单极性、双极性、单极性倍频SPWM
|
存储 Go C语言
Python 的整数是怎么实现的?这篇文章告诉你答案
Python 的整数是怎么实现的?这篇文章告诉你答案
360 7
|
存储 关系型数据库 API
必看!淘宝商品详情数据接口调用,助力商城上货实战全流程(仅供参考)
本文介绍了一个实战案例,通过调用淘宝商品详情数据接口,实现商品信息的自动获取与上架至自建电商平台。主要步骤包括需求分析、技术选型、接口调用、数据存储、自动上货及定时更新,旨在提升工作效率,减少人工操作。
|
人工智能 文件存储 计算机视觉
YOLO系列模型发展史
YOLO系列模型从YOLOv3到YOLOv10,不断优化实时目标检测性能和速度。最新版本YOLOv8增加了实例分割、姿态估计等功能。此外,还包括Segment Anything Model(SAM)、MobileSAM、FastSAM、YOLO-NAS、RT-DETR和YOLO-World等模型,分别在不同场景下提供高效的目标检测和分割能力。
683 0