C语言9元素数组逆序打印时出现多余随机值的原因与修复
问题产生原因
你定义的int a[9]是长度为9的整型数组,合法的下标访问范围是0~8。你最后打印数组的循环条件写为i<10,会执行10次打印操作,第10次访问的a[9]已经超出了数组的合法内存边界,属于数组下标越界访问。
C语言本身默认不会做数组下标越界校验,越界访问到的是数组后方相邻的未知内存区域,这块区域的数值是未初始化的随机垃圾值,你输出里看到的32765就是这块内存的残留数据。
修复方案
只需要将打印循环的终止条件修改为和数组长度匹配即可,同时可以删掉你代码里没用的int n=10冗余代码,或者把n改为9作为统一的长度边界方便后续维护。
修复后的参考代码如下:
/*This is a c program that inputs an array of 9 numbers, reverses it and prints it*/ #include <stdio.h> int main() { // 定义常量存储数组长度,后续修改更便捷 const int ARRAY_LEN = 9; int a[ARRAY_LEN]; printf("Enter 9 numbers \n"); int i; for(i=0; i < ARRAY_LEN; i++) { scanf("%d",&a[i]); } int t; for(i=0; i < ARRAY_LEN/2; i++) { t = a[i]; a[i] = a[ARRAY_LEN - 1 -i]; a[ARRAY_LEN - 1 -i] = t; } // 打印循环边界和数组长度保持一致 for(i=0; i < ARRAY_LEN; i++) { printf("%d\t",a[i]); } return 0; }
内容的提问来源于stack exchange,提问作者Dehlan Shandirkayr
相关产品推荐
相关产品推荐

