我试图编写一个程序,打印出用户输入的任何数字的偶数除数。出于某种原因,当用户输入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];

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

10-04 11:22