C数组值是否因printf语句而更改?

C数组值是否因printf语句而更改?,c,arrays,printf,C,Arrays,Printf,我试图编写一个程序,打印用户输入的任何数字的偶数除数。出于某种原因,当用户输入10并打印程序时: 10 is evenly divisible by: 1, 3, 2, 27, logout 我不知道这些数字是从哪里来的。如果取消对第二个到最后一个printf语句的注释,将得到以下结果: 10 is evenly divisible by: i = 0 1, i = 1 2, i = 2 5, i = 3 32767, logout 为什么要这样做 这是我的密码: #include <

我试图编写一个程序,打印用户输入的任何数字的偶数除数。出于某种原因,当用户输入10并打印程序时:

 10 is evenly divisible by:
1, 3, 2, 27, logout
我不知道这些数字是从哪里来的。如果取消对第二个到最后一个printf语句的注释,将得到以下结果:

10 is evenly divisible by:
i = 0
1, i = 1
2, i = 2
5, i = 3
32767, logout
为什么要这样做

这是我的密码:

#include <stdio.h>

int main(void ) {

    int n, i, leng = 0, arr[leng];

    printf("Enter an integer\n");
    scanf("%i",&n);

    printf("%i is evenly divisible by:\n", n);
    for (i = 1; i <= n / 2; i++) {
        if (n % i == 0) {
            arr[leng] = i;
            leng++;
        }
    }


    for (i = 0; i <= leng; i++) {
        printf("i = %i\n", i);
        printf("%i, ", arr[i]);
    }
}
#包括
内部主(空){
int n,i,leng=0,arr[leng];
printf(“输入一个整数\n”);
scanf(“%i”和“&n”);
printf(“%i可被:\n”,n整除);
对于(i=1;i

你声明了一个长度为0的数组,然后愉快地写过它的结尾。C数组本身不会动态增长。因此,你损坏了(堆栈)内存,因此您会发现令人惊讶的行为。

更改
leng
的值不会导致数组
arr
被神奇地调整大小。
arr
被创建为一个零元素数组(在定义点上有一次)(不是特别有用),并且从此不再调整大小


所发生的一切是,多个值被写入一个具有零元素的数组。这是一种未定义的行为。通常以覆盖该数组位置附近的内存的形式出现……该内存可能包含变量或其他程序数据。

您将arr的长度设置为leng,并将其设置为0。这将继续要中断,您需要将其分配为n/2或类似的
leng=0,arr[leng];
int n, i, leng = 0, arr[leng];