防止越界访问数组

简介: 防止越界访问数组

示例代码:

#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
批处理--节约你的开发时间
批处理--节约你的开发时间
|
7月前
|
机器学习/深度学习 存储 前端开发
阿里云服务器8核16G配置详解:热门实例规格、价格与选购指南
阿里云服务器8核16G配置,这样的配置能够满足大多数中小型网站、Web前端服务器以及计算密集型任务的需求。根据最新的收费标准及活动价格来看,云服务器8核16G配置收费标准最低的是经济型e实例,按量收费标准0.9元/小时,如果是需要年付的话,目前选择计算型c8y实例的活动价格为为2861.27元/1年起。本文为大家介绍8核16G配置的几款主要热门实例规格各自的性能与收费标准价格情况,以供选购参考。
硬件看门狗--保护你的硬件不宕机
常用的都是软件看门狗,需要依赖MCU内部的独立看门狗或者窗口看门狗,本次使用的是硬件看门狗,硬件上更加稳定可靠
从零开始做逆变器系列 ( 二 ): 单极性、双极性、单极性倍频SPWM
从零开始做逆变器系列 ( 二 ): 单极性、双极性、单极性倍频SPWM
|
算法 机器人
|
新能源
从零开始做逆变器系列文章之逆变原理
从零开始做逆变器系列文章之逆变原理
从零开始做逆变器系列文章之逆变原理
|
安全 编译器 C语言
一文讲清楚内联函数 inline
在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数。