找回密码
 立即注册
查看: 116|回复: 2

有意思的C语言越界问题

[复制链接]

1

主题

1

回帖

13

积分

新手上路

积分
13
发表于 2022-9-20 21:22:18 | 显示全部楼层 |阅读模式
  1. #include <stdio.h>
  2. #define MAX 255
  3. int main(void)
  4. {
  5.     unsigned char a[MAX], i;
  6.     for (i = 0; i <= MAX; i++)
  7.     {
  8.         a[i] = i;
  9.     }
  10.     for (i = 0; i <= MAX; i++)
  11.     {
  12.         printf("%d", a[i]);
  13.     }
  14.     printf("\n");
  15.     return;
  16. }
复制代码
无符号整型字符 unsigned  char 占用8位,最大值是255,当加到256时候i就变成了0


回复

使用道具 举报

0

主题

1

回帖

6

积分

新手上路

积分
6
发表于 2022-9-21 18:32:34 | 显示全部楼层
MAX=255,数组A的下标范围为:0..MAX1、,这是其一,其二 当i循环到255时,循环内执行: A[255]=255;这句本身没有问题,但是返回for (i=0;i<=MAX;i++)语句时,由于unsigned char的取值范围在(0..255),i++以后i又为0了..无限循环下去.
回复

使用道具 举报

0

主题

5

回帖

24

积分

新手上路

积分
24
发表于 2022-9-21 21:12:46 | 显示全部楼层
利用了无符号字符型数据的取值范围特性,第一个for陷入了无限死循环了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|粤嵌技术交流空间

GMT+8, 2025-7-8 00:14 , Processed in 0.727696 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表