防止越界访问数组

简介: 防止越界访问数组

示例代码:

#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
批处理--节约你的开发时间
批处理--节约你的开发时间
从零开始做逆变器系列 ( 二 ): 单极性、双极性、单极性倍频SPWM
从零开始做逆变器系列 ( 二 ): 单极性、双极性、单极性倍频SPWM
硬件看门狗--保护你的硬件不宕机
常用的都是软件看门狗,需要依赖MCU内部的独立看门狗或者窗口看门狗,本次使用的是硬件看门狗,硬件上更加稳定可靠
|
新能源
从零开始做逆变器系列文章之逆变原理
从零开始做逆变器系列文章之逆变原理
从零开始做逆变器系列文章之逆变原理
|
安全 编译器 C语言
一文讲清楚内联函数 inline
在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。