C语言 数组内存溢出 - C语言零基础入门教程

目录

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.数组内存溢出简介

溢出:想象一个桶,桶的容积是有限的,你装满了水以后,如何还要往里面装,那么水就溢出到地面了。

C 语言中的溢出和这个原理一样,桶的容积就表示你定义的某一数据的内存大小,往里面写入数据就表示在装水。

案例一:一个计时器,最大计 100s 的时,你让他跑了 120 秒,它就溢出了;

案例二:两个 unsignedchar,一个200,一个也是200,相加,结果也就溢出,因为 unsignedchar 最大就 255 ;

二.数组内存溢出实例

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 数组内存溢出
//@Time:2021/06/10 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/


#include<stdlib.h>
#include<stdio.h>
void main()
{
    unsigned char a[3] = {0};
    a[0] = 200;
    a[1] = 200;
    a[2] = a[0] + a[1]; //unsigned char 取值范围:0~255 ,超出取值范围
    printf("a:%d  b:%d c:%d\n", a[0], a[1], a[2]);
    system("pause");
}
/*
输出:
a:200  b:200 c:144
请按任意键继续. . .
*/

C语言中unsignedchar无符号字符类型取值范围是0~255,很明显a[2]=400,超出取值范围,内存溢出!为什么a[2]=144

当如果 unsignedchar 变量超过 255之 后,默认又继续重 0 开始计算,例如:[int](https://www.codersrc.com/archives/7409.html) 类型 和 unsignedchar类型转换:

int类型 和 unsigned char类型转换
    int     unsigned char
     254      254
     255      255
     256      0
     257      1
     258      2
     ...      ...
     399      143
     400      144
  // 400 - 255 = 144

在取值 0~255 的时候,int 和当如果 unsignedchar 一样,当超出 255 之后,当如果 unsignedchar 继续重 0 开始;

三.猜你喜欢

  1. 安装 Visual Studio
  2. 安装 Visual Studio 插件 Visual Assist
  3. Visual Studio 2008 卸载
  4. Visual Studio 2003/2015 卸载
  5. C 语言格式控制符/占位符
  6. C 语言逻辑运算符
  7. C 语言三目运算符
  8. C 语言逗号表达式
  9. C 语言 sizeof 和 strlen 函数区别
  10. C 语言 strcpy 和 strcpy_s 函数区别
  11. C 语言 memcpy 和 memcpy_s 区别
  12. C 语言 数组定义和使用
  13. C 语言 数组遍历
  14. C 语言 数组排序 – 冒泡法排序
  15. C 语言 数组排序 – 选择法排序
  16. C 语言 数组排序 – 插入法排序
  17. C 语言 数组排序 – 快速法排序
  18. C 语言 数组下标越界
  19. C 语言 数组内存溢出

未经允许不得转载:猿说编程 » C 语言 数组内存溢出

本文由博客 - 猿说编程 猿说编程 发布!

posted @ 2021-08-19 09:44  猿说编程  阅读(505)  评论(0编辑  收藏  举报