这个程序在c中数组的开头插入的输出是什么?原因是什么?

这个程序在c中数组的开头插入的输出是什么?原因是什么?,c,C,输出是 12 1. 2. 3. 4. 5. 12 为什么? 这样做时,阵列内存没有问题 #include<stdio.h> #include<conio.h> void main() { int a[]={1,2,3,4,5,6}; int num,i; for(i=6;i>0;i--) { a[i]=a[i-1]; } printf("enter any no, "); scanf("%d

输出是 12 1. 2. 3. 4. 5. 12 为什么? 这样做时,阵列内存没有问题

#include<stdio.h>
#include<conio.h>

void main() 
{
    int a[]={1,2,3,4,5,6};
    int num,i;
    for(i=6;i>0;i--)
    {
        a[i]=a[i-1];
    }
    printf("enter any no, ");
    scanf("%d",&num); // input 12
    a[0]=num;
    for(i=0;i<=6;i++)
    {
        printf("\n\n%d",a[i]);
    }
    getch();
}
数组的内存是相同的,但输出是12 1 2 3 4 5 6现在输出是更改的 那么,当我们使用scanf时,为什么输出不同呢

不存在未定义行为的错误,也不存在数组长度的错误

请告诉我使用scanf时发生这种情况的原因???

这是一种未定义的行为,因为您试图访问超出边界的数组

C11标准说明:

J.2未定义的行为

数组下标超出范围,即使对象明显不在范围内 可以使用给定的下标访问,如左值表达式中所示 a[7]鉴于a[4][5]6.5.6中的声明

意味着任何事情都可能发生。程序可能会崩溃或不产生任何结果或打印预期输出。

分析代码:

#include<stdio.h>
#include<conio.h>

void main() 
{
    int a[]={1,2,3,4,5,6};
    int num,i;
    for(i=6;i>0;i--)
    {
        a[i]=a[i-1];
    }
    printf("enter any no, ");
    //scanf("%d",&num); 
    a[0]=12;
    for(i=0;i<=6;i++)
    {
        printf("\n\n%d",a[i]);
    }
    getch();
}

根据C标准,它的定义不明确,不推荐。< /P>如果是C,比标记C++不合适。反之亦然。这是未定义的行为。您有未定义的行为,因为数组arr在索引6处没有第7个元素。索引范围为0到5。@AshishVerma您可以尝试打印任何索引。但是,如果在为数组定义的区域之外使用索引,则会调用未定义的行为。这意味着任何事情都有可能发生。你可能会被鼻魔折磨@阿什什-没有任何解释。对于未定义的行为,任何事情都可能发生,包括显示您期望的内容。或者完全不同的东西。没有规则。不,如果我们这样做,a[0]=12;完全是work@AshishVerma在您的代码中,isory先生,但在c中,您可以打印数组的任何索引号,就像您可以清除int arr[5]这样的数组一样;在此之后,在10号索引上插入值,如arr[10]=20,然后打印arr[10]ans20@AshishVerma未定义的行为意味着任何事情都可能发生@AshishVerma-阅读K&R C的书,因为它被提到。输出可以是任何东西。它不符合逻辑,对于某些设备,您可以提出一种逻辑,但对于其他设备,它可能会失败。这就是为什么undefined Behavior想在数组的开头插入您想插入的内容?任何数字都可以在控制台上输入[0]=num;从用户处获取编号并将其分配给作为第一个索引的a[0]。

void main() 
{
int a[]={1,2,3,4,5,6};  //Array of 5 elements
int num,i;
//for(i=6;i>0;i--)         //i. Bound Checking Error.
for(i=5; i>0; i--)           //correct.
{
   a[i]=a[i-1];          //Trying to insert element 6 value over element 5. However you have only 5 elements in consecutive memory location. In i. Reference`
}
printf("enter any no, ");
scanf("%d",&num); // insert 12
a[0]=num;
for(i=0;i<=6;i++)  // you have only 5 elements trying to access 6 elements.
{
     printf("\n\n%d",a[i]);
}
getch();
}