我试图在数组的末尾插入一个整数。但是,当我尝试执行代码时,随机值(47)显示在最后一个位置。即使我更改要插入的值,47也不会改变。 Output is this.
谁能告诉我为什么它是47?它是垃圾价值吗?我的代码如下: -
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int upper=6;
int a[upper];
int i;
for(i=0;i<upper;i++)
{
scanf("%d",&a[i]);
}
printf("The array before insertion is \n");
for(i=0;i<upper;i++)
{
printf("%d \n",a[i]);
}
printf("\n The array after insertion is \n");
upper=upper+1;
a[upper]=66;
for(i=0;i<upper;i++)
{
printf("%d \n",a[i]);
}
return 0;
}
答案 0 :(得分:1)
你声明一个大小为upper
(6)的数组,但是在这里:
a[upper]=66;
您尝试访问阵列的第8个位置(因为您在upper= upper + 1
之前执行过) - 您不拥有的位置。你正在做的是UB,因此可以打印47或其他任何可能发生的事情
答案 1 :(得分:1)
您刚刚遇到的是未定义的行为,通过访问数组末尾的内存(当您将upper
设置为7时)。您正在为第8个(索引7,超出边界元素)分配值,然后读取第7个元素(索引6,也超出边界),这恰好是垃圾。
未定义的行为只是 - undefined 。甚至没有必要弄清楚它为什么会发生。它完全取决于操作系统和编译器。
答案 2 :(得分:0)
您已为数组指定了值66到第8个元素(第7个索引),并且您正在从索引编号0到第6个索引进行打印。因此,第6个索引不会为您分配任何值。所以,它是垃圾。如果你想在最后添加,那么将a [upper] = 66更改为[upper-1] = 66。
答案 3 :(得分:-2)
像这样颠倒这两行:
a[upper]=66;
upper=upper+1;
你的代码应该没问题。