0

可能重复:
Turbo C 阵列问题

#include <stdio.h>

#define LIM 40

int main()
{
       int day=0;
       float temp[LIM];
       do
       {
               printf("Enter temperature for day %d.", day);
               scanf("%f", &temp[day]);
       }
       while(temp[day++] && day<LIM );
}

关于最后一行。为什么不满意while(temp[day++] > 0)?因为我已将LIM设置为 40?为什么要添加一些附加条件,例如day<LIM

4

3 回答 3

3

因为,如果您输入 41 个数字,您将写入数组之外的位置,从而调用可怕的未定义行为。当您尝试写入temp[40](第 41 个元素)时,您可能会破坏不该写入的内存。它可能会在数组末尾之外工作一点点,但这是未定义行为的本质。这仍然不是一个好主意。

day < LIM当您输入 40 个温度时,该位将强制循环退出,无论您实际输入的是什么值。

于 2011-05-21T08:06:03.237 回答
2

避免数组溢出。该temp数组有LIM单元格,您需要检查您是否尝试访问超出此范围的内存,因为它会导致未定义的行为。

如果你想获得超过 40 个元素,你应该为它们分配更多的内存,这可以通过定义LIM一个更大的值来完成,比如#define LIM 48.

于 2011-05-21T08:06:22.910 回答
1

因为 C 不会变魔术。它不会检查您是否超出了分配的内存。它不知道访问是否有效,因此无论如何都会尝试。

于 2011-05-21T08:06:05.327 回答