1

当我运行这段代码时,该printf()函数似乎给出了一个随机的大数,就好像它正在调用一个超出范围的数组。这里发生了什么?

#include <stdio.h>
#include <math.h>

int main(void) 
{
    int test_num = 1000;
    int factors[16];

    for(int i = 1, j = 0; i < test_num; i++, j++) {
        if(test_num % i == 0)
            factors[j] = i;
    }

    printf("%d", factors[2]);

    return 0;
}
4

3 回答 3

3

最有可能的问题是,j即使您不分配i.

你得到的因子序列是 1, 2, 4, 5, 8, 10, ... 你可能希望将它们分配给索引 0-5(包括),而不是 0、1、3、4、7、9 , ETC。

改变你的循环如下:

for(int i = 1, j = 0; i < test_num && j < 16; i++) {
    if(test_num % i == 0) {
        factors[j] = i;
        j++;
    }
}

要点是仅ji符合您的标准时才增加。您还想确保您不会越界 ( && j < 16)。

于 2018-08-16T18:49:28.383 回答
0

如果您打印出来ij在循环中,请注意j永远不是 2。

因此,factors[2]永远不会初始化,因此您将打印出垃圾。

于 2018-08-16T18:47:27.170 回答
0

j == 2,i == 31000 % 3不等于 0。它等于 1。没有通过你的if语句条件。因此factors[2]将是未定义的(因为您没有初始化数组)。因此数量很大。

于 2018-08-16T18:53:14.543 回答