Turbo C阵列问题

时间:2011-05-21 08:03:41

标签: c arrays turbo-c

  

可能重复:
  Turbo C Array Question

#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 个答案:

答案 0 :(得分:3)

因为,如果输入41个数字,您将写入数组外的位置,从而调用可怕的未定义行为。当你试图写入temp[40](第41个元素)时,你可能会破坏你不应该记忆的记忆。 可能工作一段时间超出数组的末尾,但这是未定义行为的本质。这仍然不是一个好主意。

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

答案 1 :(得分:2)

避免数组溢出。 temp数组包含LIM个单元格,您需要检查是否不会尝试访问内存,因为它会导致未定义的行为。

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

答案 2 :(得分:1)

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

答案 3 :(得分:-4)

它“满意” - 为什么你认为它不会。在这里发帖时,请发布您要询问的真实代码。